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