我的代码有问题,我认为这是由于循环包含造成的

问题描述 投票:0回答:1

我希望能够用

color
调用
player1
方法,但是该方法没有在
player1
类中定义;它在
player2
类中定义,特别是在
characteristic
类中。不过,从A类调用方法到B类好像是不可能的,书上也没有提到。

我已经评论了代码中我认为问题所在的行。

这是我遇到的错误:

引发异常:读取访问冲突。这是 nullptr。

遗产.h

#pragma once
#ifndef HeritageHPP
#define HeritageHPP

#include <iostream>
#include <string>

class Caracteristique;

class Personnages
{
public:
    Personnages(int vie, int age, std::string nom, std::string prenom /*Caracteristique cara*/) : m_age(age), m_vie(vie), m_nom(nom), m_prenom(prenom)/* m_caracteristique(cara) */ {} // Constructeur du personnage
    void Perso1(std::string nom, std::string prenom);
    void Perso2(std::string nom, std::string prenom);
    void couleur(std::string couleur);

    void affiche() const { std::cout << m_nom <<" " << m_prenom; }
private:
    int m_age, m_vie;
    std::string m_nom, m_prenom;
    Caracteristique * test; // are this good ?
};

class Caracteristique : public Personnages
{
public:
    Caracteristique(int vie, int age, std::string nom, std::string prenom, std::string origine = "Europeen") : Personnages(vie, age, nom, prenom), /*Caracteristique cara*/ m_origine(origine) {}
    void couleur(std::string couleur);
    void taille(int taille);
    void poids(int poids);
    //void affiche() const { std::cout << m_couleur << std::endl; }

   

    //Personnages instancePersonnages;
private:
    std::string m_origine;
    std::string m_couleur;
    int m_taille;
    int m_poids;
    Personnages* test;
};

遗产.cpp

//Pour la classe de bases.
//Méthode de perso1
#include "Heritage.h"

void Personnages::Perso1(std::string nom, std::string prenom)
{
    m_nom = nom;
    m_prenom = prenom;
}
//Méthodes de perso2
void Personnages::Perso2(std::string nom, std::string prenom)
{
    m_nom = nom;
    m_prenom = prenom;
}

//My probleme is here also
void Personnages::couleur(std::string couleur)
{
    test->couleur(couleur);
}
/*
void Personnages::couleur(std::string couleur)
{
    m_caracteristique.couleur(couleur);
}
*/
//Pour la classe Caractéristique.
/*
void Caracteristique::couleur(std::string couleur)
{
    m_couleur = couleur;
}
*/
void Caracteristique::taille(int taille)
{
    m_taille = taille;
}

void Caracteristique::poids(int poids)
{
    m_poids = poids;
}

//My Probleme is here
void Caracteristique::couleur(std::string couleur)
{
    test->couleur(couleur);
}

main.cpp

#include <iostream>
#include "Heritage.h"

int main()
{
//Creation des objets.
Personnages Joueur1 (50, 20, "molikor","David");
Caracteristique Joueur2(20, 50," "," "," ");

    //Apppel des méthodes pour les Personnages
    
    //Perso1
    Joueur1.Perso1("Molikor ", "Jean \n"); //Nom prenom du perso1
    Joueur2.Perso2("Tilor ", "Patrick"); //Nom prenom du perso2
    
    //Perso2
    //Joueur1.couleur("Chatain"); //Couleur de cheveux du joueur1 chatin.
    //Joueur2.couleur("Brun"); //Couleur de cheveux du joueur2 brun.
    Joueur1.affiche();
    
    Joueur2.couleur("rose");
    Joueur2.affiche();
    
    Joueur1.couleur("Jaune"); // Here is the probleme....
    Joueur1.affiche();

}
c++
1个回答
0
投票

@Atmo:

您好,感谢您的回复。我想我将按照您的建议重新开始编写代码。我确实混淆了一些东西,缺乏逻辑……我刚接触 C++ 才 6 个月,读了 Claude Delannoy 的书《Program in Modern C++ from C++11 to C++20》……但我意识到,阅读这本书并不足以让我了解所有要知道的事情……此外,我还创建了几个功能项目,例如银行登记系统、自治房屋的模拟(但要注意,没有什么特别的,一些基本但集成智能指针、函数,但我不认为我集成了类,只是程序),还有一个车库的模拟(但同样,没有什么特别的)......还有一个密码生成器,但没有密码学,只是一个像这样的小程序应用我从 Claude Delannoy 的书中学到和重读的内容,我正在重读这本书,看看我是否错过了一些东西或误解了某些东西,但尽管如此重读,我还没有成功地完成我向你展示的这段代码……然而我明白了书上的所有内容…

无论如何,再次感谢您的回复,我会重新开始编写代码并考虑您的建议......

祝您度过一个愉快的夜晚,很快再见。

蛇-伊格尔

@所有人:

感谢所有回复的人..

© www.soinside.com 2019 - 2024. All rights reserved.