C ++的填充阵列与对象阵列从类型派生
-
27-09-2019 - |
题
在C ++我有指针数组到播放器对象和要与善变对象,其中善变是从播放派生的类来填充它。这是因为我想一般的播放器阵列,我可以与所有从Player类来源于不同类不同的对象填写。
我怎样才能做到这一点?
创建到播放器对象
的指针数组Player ** playerArray;
然后初始化数组到一定大小
playerArray = new Player *[numPlayersIn];
但随后以下确实由于某种原因不工作:
playerArray[i] = new Fickle(0);
如何填充playerArray与善变对象(Fickel是从播放派生的类)?
感谢。
更新:
我得到的错误消息(在Eclipse IDE):
expected ';' before 'Fickle'
我想这可能是是与善变的定义。
在Fickle.hpp文件包含:
#pragma once
#include "player.hpp";
class Fickle: public Player {
public:
// constructor
Fickle(int initChoice){
choice = initChoice;
}
}
这是OK还是有与此一问题?
在播放器类的头文件有:
class Player {
private:
public:
int getChoice();
int choice; // whether 0 or 1
virtual void receive(int otherChoice); // virtual means it can be overridden in subclases
};
在接收方法将被覆盖在菲科尔,并从播放器类派生的其他类
更新2:
行我认为错误实际上是由于代码的不同部分。
播放器定义了一个方法得到:
virtual void receive(int otherChoice);
这应该是重写由子类善变但在菲科尔定义:
void Fickle::receive(int otherChoice) {}
给出了错误:
no 'void Fickle::receive(int)' member function declared in class 'Fickle'
但我不知道这是为什么,因为接收在播放器类中定义?
解决方案
虽然你也许应该使用一个载体,而不是,有没有真正的理由一个动态分配的数组的不能的工作。这里有一点工作演示代码:
#include <iostream>
class Player {
public:
virtual void show() { std::cout << "Player\n"; }
};
class Fickle : public Player {
public:
virtual void show() { std::cout << "Fickle\n"; }
};
int main() {
Player **p = new Player *[2];
p[0] = new Player;
p[1] = new Fickle;
for (int i=0; i<2; i++)
p[i]->show();
for (int i=0; i<2; i++)
delete p[i];
delete [] p;
return 0;
}
其他提示
看起来你在菲科尔类的端忘记分号:
class Fickle: public Player {
// ...
}; // <---- this semicolon
也许别的地方。
更新2:当你在派生类重写虚函数必须声明它有太
如果它不能正常编译,那么你可能没有#include
标题定义相同的源文件中Fickle
你的代码。通常这样的装置的一个错误,编译器不知道Fickle
是什么。
确实Fickle
有一个接受int
或指针类型构造函数?难道是私下从Player
衍生?否则,它看起来像这应该工作。
不隶属于 StackOverflow