我正在尝试使用抽象类的构造函数。我必须在抽象类 Swiat
中存储对类 Organizmy
的引用。 Organizmy
有子类 Zwierze
(也是一个抽象类),然后是 Zwierze
的另一个子类,Czlowiek
。 (Organizmy
(抽象) >>> Zwierze
(抽象) >>> Czlowiek
).
我正在尝试初始化一个向构造函数传递参数的列表。首先在 Czlowiek
类中传递给 Zwierze
构造函数,然后 Zwierze
构造函数将参数传递给 Organizm
构造函数。
这是我的代码:
组织.h
#pragma once
class Swiat;
class Organizm
{
public:
Swiat& swiat; //MY REFERENCE
char symbol = '?';
int sila = 0;
int inicjatywa = 0;
int* polozenie; //x y
virtual void Akcja()=0;
virtual void Kolizja()=0;
virtual void Rysowanie()=0;
Organizm(Swiat& swiat, char symbol, int sila, int inicjatywa, int polozenie[2]);
Organizm.cpp
#include "Organizm.h"
#include <iostream>
using namespace std;
void Organizm::Rysowanie()
{
cout << "Hej jestem organizmem" << endl;
}
Organizm::Organizm(Swiat& swiat, char symbol, int sila, int inicjatywa, int* polozenie)
:swiat(swiat), symbol(symbol), sila(sila), inicjatywa(inicjatywa), polozenie(polozenie) {}
Zwierze.h
#pragma once
#include "Organizm.h"
class Zwierze : public Organizm
{
public:
void Akcja() override;
void Kolizja() override;
Zwierze(Swiat& swiat, char symbol, int sila, int inicjatywa, int* polozenie);
};
Zwierze.cpp
#include "Zwierze.h"
using namespace std;
void Zwierze::Akcja()
{
//todo
}
void Zwierze::Kolizja()
{
//todo
}
Zwierze::Zwierze(Swiat& swiat, char symbol, int sila, int inicjatywa, int* polozenie) : Organizm(swiat, symbol, sila, inicjatywa, polozenie) {}
Czlowiek.h
#pragma once
#include "Zwierze.h"
class Czlowiek : public Zwierze
{
public:
//int polozenie[2];
int* polozenie;
Swiat& s;
void Rysowanie() override;
void Powiedz();
Czlowiek(Swiat& swiat);
};
Czlowiek.cpp
#include "Czlowiek.h"
#include <iostream>
using namespace std;
Czlowiek::Czlowiek(Swiat& swiat) : Zwierze(swiat, 'A', 5, 4, polozenie) {}
void Czlowiek::Rysowanie()
{
cout << "Hej, jestem czlowiekiem"<<symbol << endl;
}
void Czlowiek::Powiedz()
{
cout << "Mam tyle sily: " << sila << endl;
}
在 main()
中,我只创建了 Swiat
对象,而在 Swiat
方法中正在创建新的 Czlowiek
对象:
Organizm* czlowiek = new Czlowiek(*this);
我收到的错误信息是
<块引用>“未初始化的引用成员”(代码块)
和
<块引用>"Czlowiek::s": "必须初始化引用"(视觉)
答案 0 :(得分:1)
您需要像这样初始化构造函数的成员初始化列表中的成员引用Czlowiek::s
:
Czlowiek::Czlowiek(Swiat& swiat) :s(swiat), Zwierze(swiat, 'A', 5, 4, polozenie) {}
答案 1 :(得分:1)
您没有初始化类 s
的 Czlowiek
成员。你可能想要这样的东西。
Czlowiek::Czlowiek(Swiat& swiat) : Zwierze(swiat, 'A', 5, 4, polozenie), s{swiat} {}