Results 1 to 3 of 3

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Registered User MrShadow's Avatar
    Join Date: Jul:2007
    Location: Êúì ãðîáèùàòà
    Posts: 2,606

    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;
         }
         
    }
    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
    Edit: Ïðè êîïèðàíå áÿõ ïðîïóñíàë 1-2 ðåäà. Âå÷å ñúì ãè ñëîæèë, íî ïðîìÿíà íÿìà äå

    --------- Äîáàâåíî â 08:49 --------- Ïðåäèøíî ìíåíèå: â 08:08 ---------

    Ñëåä íÿêîëêî÷àñîâî (öÿëà íîù ãî ïèøà òîâà ïðîãðàì÷å) ðîâåíå â ãóãúë è âå÷å ïî÷òè îòêàçàë ñå íàìåðèõ è ðåøåíèå íà ïðîáëåìà ñè

    ßâíî òðÿáâàøå äà íàïðàâÿ "makefile" èëè äà ïîëçâàì ôóíêöèÿòà íà DevC++ çà "project" çàùîòî íå êîìïèëèðà è TTT.cpp êîãàòî ìó äàì äà êîìïèëèðà main.cpp
    Last edited by MrShadow; 22nd June 2012 at 08:34.

  2. #2
    ɐ-əpoɔᴉu⋂ ɐí íəÔ anrieff's Avatar
    Join Date: Apr:2004
    Location: Sofia
    Posts: 8,448
    Òè ñè íàìåðèë ðåøåíèåòî íà òâîÿ ïðîáëåì, íî äà äîïúëíÿ îùå íåùî. Êîãàòî âè äàâà òàêúâ òèï ëèíêåðñêè ãðåøêè, âúçìîæíèòå ïðè÷èíè ñà òðè:

    1. Íå âêëþ÷âàòå íÿêîé .cpp ôàéë â ïðîåêòà (ëèïñâà êîä)
    2. Èìàòå âñè÷êè ôàéëîâå, íî ñòå ïðîïóñíàëè äà ðåàëèçèðàòå íÿêîé ìåòîä. Ïðèìåðíî, â êîäà ãîðå, àêî îò TTT.cpp èçòðèåòå íÿêîé îò ðåàëèçèðàíèòå ìåòîäè. Êîìïèëàòîðúò íÿìà äà êàæå êîï÷å (ðåàëèçàöèèòå íà äåêëàðèðàíèòå â .h ôàéëà ìåòîäè ìîãàò äà ñà êúäåòî ñè ïîèñêàòå, íÿìà çàäúëæåíèå äà ñà íåïðåìåííî â TTT.cpp è êàòî ãè íÿìà òàì, êîìïèëàòîðúò ùå ñè êàæå - å, ãîëÿìà ðàáîòà, íÿêúäå äðóãàäå ùå ãè å ðåàëèçèðàë ÷îâåêúò). Íàêðàÿ, îáà÷å, ëèíêåðà ùå âè èçïèùè.
    3. Äåêëàðàöèÿòà è äåôèíèöèÿòà íà ôóíêöèÿ ñå ðàçìèíàâàò. Ïðèìåðíî:

      .h ôàéë:
      Code:
      bool parseCoords(const string& s, int& x1, int& y1, int& x2, int& y2);
      .cpp ôàéë:
      Code:
      bool parseCoords(string& s, int& x1, int& y1, int& x2, int& y2)
      {
      ....
      }
      Ôóíêöèÿòà ñ èçèñêâàíîòî èìå ñè å òàì, îáà÷å å ñ ðàçëè÷åí ïî÷åðê - ïúðâèÿò àðãóìåíò å îò ðàçëè÷åí òèï, áåç const. Êîìïèëàòîðúò îòíîâî íÿìà äà çàïîäîçðå íèùî, íî ëèíêåðúò ùå íè ñóðâàêà ñ ãðåøêè
    Åòî òàêà ñå ïëîäÿò òå, êàçâàì ñè àç. Ïîä íîñà òè.
    "640K îught to be enough for anybody" - Bill Gates, 1981
    Òåñòîâå íà áàòåðèè::Machine specs::Fract::AGG::ÍåÑåÑúðäè×îâå÷å::Baileys::blog::YouTube channel

  3. #3
    Registered User MrShadow's Avatar
    Join Date: Jul:2007
    Location: Êúì ãðîáèùàòà
    Posts: 2,606
    Áëàãîäàðÿ òè Ìíîãî ïîëåçíè ñúâåòè

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Copyright © 1999-2011 Õàðäóåð ÁÃ. Âúçìîæíî å ñúäúðæàíèåòî íà òàçè ñòðàíèöà äà å îáåêò íà àâòîðñêè ïðàâà.
iskamPC.com | mobility.BG | Bloody's Techblog | Êðèïòîâàëóòè è ìàéíèíã | 3D Vision Blog | Ìàãàçèí çà åëåêòðîííè öèãàðè