问题描述
我有抽象类 Organizm
,我在其中存储对类 Swiat
的引用。我不知道如何访问我的 Organizm
引用的对象变量。最好的解释是我的代码:
Organizmy.h
#pragma once
class Swiat;
class Organizm
{
public:
Swiat& swiat;
char symbol = '?';
int sila = 0;
int inicjatywa = 0;
int x=0,y=0;
virtual void Akcja()=0;
virtual void Kolizja()=0;
virtual void Rysowanie()=0;
Organizm(Swiat& swiat,char symbol,int sila,int inicjatywa,int x,int y);
};
Organizmy.cpp
#include "Organizm.h"
#include <iostream>
using namespace std;
void Organizm::Rysowanie()
{
cout << "Hej jestem organizmem" << endl;
}
Organizm::Organizm(Swiat& swiat,int y)
:swiat(swiat)
{
this->symbol = symbol;
this->sila = sila;
this->inicjatywa = inicjatywa;
this->x = x;
this->y = y;
}
Zwierze
(Organizmy
的子类和 Czlowiek
的基类,但我确定这在我的问题中无关紧要,它具有像 Czlowiek 这样的构造函数,但使用了 Organizmy 构造函数)
Czlowiek.h
#pragma once
#include "Zwierze.h"
class Czlowiek : public Zwierze
{
public:
void Rysowanie() override;
void Powiedz();
void Akcja() override;
Czlowiek(Swiat& swiat);
};
在 Czlowiek.cpp
中,我尝试做这样的事情:
cout<<this->swiat.x<<endl; //this mean `Czlowiek` object
我收到错误:不完整的类型是不允许的
编辑:我在 swiat.h
中添加了 czlowiek.cpp
,现在它可以工作了。我现在制作了 img 来显示我的问题。是循环依赖吗?
解决方法
如果您想像这里一样访问成员swiat
cout<<this->swiat.x<<endl;
该对象必须是已知的,但我在这里只看到一个前向声明:
class Swiat;
您还需要包含 Swiat
的定义。你必须做类似的事情
#include "Swiat.h"
或您定义的 Swiat
的任何地方。
前向声明有助于避免 .h
文件中的循环依赖,但在您的 Czlowiek.cpp
文件中,您必须包含该文件。