Getter seg错误

时间:2017-04-11 10:20:43

标签: c++

我做了简单的getter谁返回seg错误而我不知道问题出在哪里:

有一个课程"游戏"谁包含两名球员和一个托盘:

> #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; }

有人看到错误吗?谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

存在相当多的错误,例如缩进是一个很大的错误。请通过clang-format或astyle运行您的代码,这将更容易审核。

  • 不要使用此 - >当你不需要它时,这不是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 / plateau,你可以安全地在堆栈上声明它们(即没有指针) - 如果你认为你应该在堆上创建它们(指针),不要使用原始指针,使用智能指针(你的应该看起来像unique_ptr)

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

这应该可以消除您的记忆问题。现在,如果它继续发生,请发布调试输出或回溯。