2017-04-11 64 views
-4

我有做簡單的getter誰賽格返回故障,我不kwow哪裏出了問題:消氣賽格故障

有一類「遊戲」誰containt兩名球員和一個托盤:

> #ifndef PARTIE_H 
> #define PARTIE_H 
> 
> #include <string> 
> #include <iostream> 
> 
> class partie { 
>  class joueur * joueur1; 
>  class joueur * joueur2; 
>  class plateau * jeu; 
> 
> public: 
>  partie(); 
>  void initialize(std::string nomj1, std::string nomj2, int tailleplateau); 
>  int info(); 
>  ~partie(); 
> 
> }; 
> 
> #endif // PARTIE_H 

在.cpp:

> #include "partie.h" 
> #include "joueur.h" 
> #include "plateau.h" 
> #include <string> 
> #include <iostream> 
> 
> partie::partie() { 
>  plateau * jeu = new plateau(0); 
>  joueur * joueur1 = new joueur("test", 1); 
>  joueur * joueur2 = new joueur("test2", 2); 
> 
> } 
> 
> void partie::initialize(std::string nomj1, std::string nomj2, int 
> tailleplateau) { 
>  plateau * jeu = new plateau(tailleplateau); 
>  joueur * joueur1 = new joueur(nomj1, 1); 
>  joueur * joueur2 = new joueur(nomj2, 2); } 
> 
> int partie::info() { return joueur1->getIdentifiant(); 
> 
> } 
> 
> 
> partie::~partie() { 
> 
> } 

類球員:

> #ifndef JOUEUR_H 
> #define JOUEUR_H 
> #include <string> 
> #include <iostream> 
> 
> class joueur { 
>  std::string nom; 
>  int identifiant; 
> 
> public: 
>  joueur(); 
>  joueur(std::string name, int num); 
>  std::string getName(); 
>  int getIdentifiant(); }; 
> 
> #endif // JOUEUR_H 

在.cpp

> #include "joueur.h" 
> #include <string> 
> #include <iostream> 
> 
> joueur::joueur() { 
>  this->nom="DEFAULT"; 
>  this->identifiant=0; } 
> 
> joueur::joueur(std::string name, int num) { 
>  this->nom=name; 
>  this->identifiant=num; } 
> 
> int joueur::getIdentifiant() { 
>  return identifiant; } 
> 
> std::string joueur::getName() { 
>  return nom; } 

任何人看到錯誤?謝謝你的幫助

+0

main.cpp中: 的#include 「mainwindow.h」 的#include <的QApplication> 的#include 「partie.h」 INT主(INT的argc,字符* argv的[]){ 的QApplication一個( argc,argv); // MainWindow w; //w.show(); partie * newgame; newgame-> initialize(「dylan」,「bob」,13); newgame-> info(); return a.exec(); } – rebug

+0

出於某種原因,你在'joueur'中正確做了事,但在'partie'中做錯了。 – molbdnilo

回答

1

有很多錯誤,例如縮進是一個很大的錯誤。請通過clang格式或astyle運行您的代碼,這將更容易審查。

  • 不使用this->當你不需要它時,這不是java。
  • 不要混淆與當地變量和類成員(這是你的錯誤)
plateau * jeu = new plateau(tailleplateau); 
joueur * joueur1 = new joueur(nomj1, 1); 
joueur * joueur2 = new joueur(nomj2, 2); } 

在這裏,您創建一個本地命名JEU變量,jouer1和jouer2,但它看起來像你也在你的班級中宣佈這些變量,所以修復很簡單:

jeu = new plateau(tailleplateau); 
joueur1 = new joueur(nomj1, 1); 
joueur2 = new joueur(nomj2, 2); 

不要重新聲明它們。 :)

一些更多的提示: - C++不是Java,你也不需要通常是新的東西: - 有沒有必要添加堆上您joeurs /高原,你可以在棧上安全地將它們聲明(即沒有指針) - 如果你認爲你應該創建它們在堆(指針),不要使用原始指針,使用智能指針(你應該像的unique_ptr)

class Game { 
    Game() : player1(make_unique<Player>()); 
    } 
    private: 
    std::unique_ptr<Player> player1; 
}; 

這應該消除你的記憶問題。現在,如果它繼續發生,請發佈調試輸出或回溯。