Results 1 to 3 of 3
Thread: C++ Linker error - ïîìîù ìîëÿ :)
Hybrid View
-
22nd June 2012 08:49 #1
C++ Linker error - ïîìîù ìîëÿ :)
Çäðàâåéòå,
Ïðîäúëæàâàì áàâíî áàâíî äà íàâëèçàì â äúëáèíèòå íà ïðîãðàìèðàíåòî. Çàäà÷àòà àêî ñúáåðà êëàñúò è äåôèíèöèÿòà â åäèí ôàéë ñ main() ñè ðàáîòè áåçïðîáëåìíî. Çà ñúæàëåíèå, êîãàòî ðàçäåëÿ äåôèíèöèÿòà íà êëàñà è ñàìèÿ êëàñ â .h è .cpp ôàéëîâå è main() â îòäåëåí ïîëó÷àâàì ñëåäíèòå ãðåøêè:
[Linker error] undefined reference to `TTT::TTT()'
[Linker error] undefined reference to `move(int, TTT*)'
ld returned 1 exit status
Êîìïèëèðàì ñ devc++. Âñè÷êè ôàéëîâå ñà ñúáðàíè â 1 ïàïêà. Ïîìàãàéòå ìîëÿ
Åòî è ñàìèÿ êîä:
Code:#include <iostream> #include <cstdlib> #include "TTT.h" using namespace std; int main(){ TTT* game = new TTT; int counter = 0; bool check = false; do{ check = move(counter,game); counter++; }while(counter < 9 && check); system("PAUSE"); return 0; }Code:#include <iostream> #include <cstdlib> const int SIZE = 3; // the size of the rows and columns used for the game using namespace std; TTT::TTT(){ matrix = new int*[SIZE]; for(int i = 0; i < SIZE; i++){ matrix[i] = new int[SIZE]; } // setting the matrix to all 0. Will use the convension 1 means X, 2 means O, everything else means empty for(int i = 0; i < SIZE; i++){ for(int j = 0; j < SIZE; j++){ matrix[i][j] = 0; } } print(); } TTT::~TTT(){ for(int i = 0; i < SIZE; i++){ delete matrix[i]; } delete[] matrix; } void TTT::setPos(int x, int y, int value){ matrix[x][y] = value; } bool TTT::isEmpty(int x, int y){ if( matrix[x][y] == 0){ return true; } return false; } void TTT::print(){ cout<<endl; for(int i = 0; i < SIZE; i++){ for(int j = 0; j < SIZE; j++){ if( matrix[i][j] == 0 ){ cout << " "; } else if( matrix[i][j] == 1 ){ cout << "X"; } else cout << "O"; if(j < SIZE - 1){ cout<< "|"; } } cout<< endl; } } int randRoll(){ return rand()%3; } void TTT::compMove(){ int x = randRoll(); int y = randRoll();; if( isEmpty(x,y)) { matrix[x][y] = 2; } else{ compMove(); } } void TTT::humanMove(){ int x,y; bool check = true; cout<<endl<<"Please enter coordinates(x and y, both between 1 and 3): "; do{ cin>>x>>y; if(x <1 || x > 3 || y < 1 || y > 3){ cout<<endl<<"One of the coordinates is out of the boundaries. Please enter new coordinates(x and y, both between 1 and 3): "; } else if( isEmpty(x-1,y-1) == false ){ cout<<endl<<"This field is already filled. Please select a new one by giving new coordinates(x and y, both between 1 and 3): "; check = false; } else { matrix[x-1][y-1] = 1; check = true; } cin.ignore(numeric_limits<streamsize>::max(),'\n'); cin.clear(); }while(!check); } int TTT::rowCheck(){ for( int i = 0; i < SIZE; i++){ if( matrix[i][0] != 0 ){ if( matrix[i][0] == matrix[i][1] && matrix[i][1] == matrix[i][2]){ return matrix[i][0]; } } } return 0; } int TTT::colCheck(){ for( int i = 0; i < SIZE; i++){ if( matrix[0][i] != 0 ){ if( matrix[0][i] == matrix[1][i] && matrix[1][i] == matrix[2][i]){ return matrix[0][i]; } } } return 0; } int TTT::diagCheck(){ if( matrix[0][0] != 0 ){ if ( matrix[0][0] == matrix[1][1] && matrix[1][1] == matrix[2][2] ){ return matrix[0][0]; } } if( matrix[2][0] != 0 ){ if ( matrix[2][0] == matrix[1][1] && matrix[1][1] == matrix[0][2] ){ return matrix[2][0]; } } return 0; } int TTT::winCheck(){ if( rowCheck() == 0 ){ if( colCheck() == 0 ){ if( diagCheck() == 0 ){ return 0; } else return diagCheck(); } else return colCheck(); } else return rowCheck(); } bool move(int m, TTT* ttt){ if( m%2 == 0 ){ cout<<"Human move"; ttt->humanMove(); } else { cout<<"Comp move"; ttt->compMove(); } ttt->print(); int set = ttt->winCheck(); if( set == 0 ) return true; else if( set == 1 ){ cout<<endl<<"YOU WIN!"<<endl; return false; } else if( set == 2 ){ cout<<endl<<"YOU LOST!"<<endl; return false; } }Edit: Ïðè êîïèðàíå áÿõ ïðîïóñíàë 1-2 ðåäà. Âå÷å ñúì ãè ñëîæèë, íî ïðîìÿíà íÿìà äåCode:#ifndef TTT #define TTT class TTT{ public: TTT(); ~TTT(); void setPos(int x, int y, int value); bool isEmpty(int x, int y); void print(); void compMove(); void humanMove(); int winCheck(); int rowCheck(); int colCheck(); int diagCheck(); private: int** matrix; }; int randRoll(); bool move(int m, TTT* ttt); #endif
--------- Äîáàâåíî â 08:49 --------- Ïðåäèøíî ìíåíèå: â 08:08 ---------
Ñëåä íÿêîëêî÷àñîâî (öÿëà íîù ãî ïèøà òîâà ïðîãðàì÷å) ðîâåíå â ãóãúë è âå÷å ïî÷òè îòêàçàë ñå íàìåðèõ è ðåøåíèå íà ïðîáëåìà ñè
ßâíî òðÿáâàøå äà íàïðàâÿ "makefile" èëè äà ïîëçâàì ôóíêöèÿòà íà DevC++ çà "project" çàùîòî íå êîìïèëèðà è TTT.cpp êîãàòî ìó äàì äà êîìïèëèðà main.cpp
Last edited by MrShadow; 22nd June 2012 at 08:34.
-
22nd June 2012 09:49 #2
Òè ñè íàìåðèë ðåøåíèåòî íà òâîÿ ïðîáëåì, íî äà äîïúëíÿ îùå íåùî. Êîãàòî âè äàâà òàêúâ òèï ëèíêåðñêè ãðåøêè, âúçìîæíèòå ïðè÷èíè ñà òðè:
- Íå âêëþ÷âàòå íÿêîé .cpp ôàéë â ïðîåêòà (ëèïñâà êîä)
- Èìàòå âñè÷êè ôàéëîâå, íî ñòå ïðîïóñíàëè äà ðåàëèçèðàòå íÿêîé ìåòîä. Ïðèìåðíî, â êîäà ãîðå, àêî îò TTT.cpp èçòðèåòå íÿêîé îò ðåàëèçèðàíèòå ìåòîäè. Êîìïèëàòîðúò íÿìà äà êàæå êîï÷å (ðåàëèçàöèèòå íà äåêëàðèðàíèòå â .h ôàéëà ìåòîäè ìîãàò äà ñà êúäåòî ñè ïîèñêàòå, íÿìà çàäúëæåíèå äà ñà íåïðåìåííî â TTT.cpp è êàòî ãè íÿìà òàì, êîìïèëàòîðúò ùå ñè êàæå - å, ãîëÿìà ðàáîòà, íÿêúäå äðóãàäå ùå ãè å ðåàëèçèðàë ÷îâåêúò). Íàêðàÿ, îáà÷å, ëèíêåðà ùå âè èçïèùè.
- Äåêëàðàöèÿòà è äåôèíèöèÿòà íà ôóíêöèÿ ñå ðàçìèíàâàò. Ïðèìåðíî:
.h ôàéë:
.cpp ôàéë:Code:bool parseCoords(const string& s, int& x1, int& y1, int& x2, int& y2);
Ôóíêöèÿòà ñ èçèñêâàíîòî èìå ñè å òàì, îáà÷å å ñ ðàçëè÷åí ïî÷åðê - ïúðâèÿò àðãóìåíò å îò ðàçëè÷åí òèï, áåç const. Êîìïèëàòîðúò îòíîâî íÿìà äà çàïîäîçðå íèùî, íî ëèíêåðúò ùå íè ñóðâàêà ñ ãðåøêèCode:bool parseCoords(string& s, int& x1, int& y1, int& x2, int& y2) { .... }
Åòî òàêà ñå ïëîäÿò òå, êàçâàì ñè àç. Ïîä íîñà òè.
"640K îught to be enough for anybody" - Bill Gates, 1981
Òåñòîâå íà áàòåðèè::Machine specs::Fract::AGG::ÍåÑåÑúðäè×îâå÷å::Baileys::blog::YouTube channel
-
22nd June 2012 10:05 #3
Áëàãîäàðÿ òè
Ìíîãî ïîëåçíè ñúâåòè




Reply With Quote
Lenovo ThinkPad 15 èëè IdeaPad 15
5th May 2023, 22:16 in Ìîáèëíè êîìïþòðè