我做了简单的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; }
有人看到错误吗?谢谢你的帮助
答案 0 :(得分:1)
存在相当多的错误,例如缩进是一个很大的错误。请通过clang-format或astyle运行您的代码,这将更容易审核。
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;
};
这应该可以消除您的记忆问题。现在,如果它继续发生,请发布调试输出或回溯。