所以,我在大约3年内没有使用过那么多的C ++,现在我在使用STL容器的继承类时遇到了一些麻烦。我已经看过几次这样的问题了,但是无法理解究竟是做了什么,或者为什么我的代码在与答案非常相似的情况下不起作用。
基本上我有两个类,R和RD,R是基类,RD是派生类。每个元素都有它的邻居,有点像图形,因此元素r1的邻居可以是R类或RD类。我以为我通过在R中创建一个私有双端队来解决这个问题,但每当我访问所述deque中的元素时,他们都不是RD,只有R.我的代码有点像这样:
class R {
public:
R();
~R();
inline void queue(R* r) { neighbours.push_back(r); }
inline R& getFirstNeighbour() { return neighbours.top(); }
virtual void printSomething() { cout << "R" << endl; }
protected:
deque<R*> neighbours;
}
class RD: public R {
public:
RD();
~RD();
void printSomething() { cout << "RD" << endl; }
void doSomethingElse();
}
每当我得到一个元素的第一个邻居并且调用printSomething时,我总是得到R.我在这里做错了什么?该怎么做?
非常感谢
答案 0 :(得分:0)
您的代码有效,但有一些错误(构造函数和析构函数缺少“{}”,这里有一些有效的代码(我在这里使用std :: deque,所以我用front()替换了top()函数)
#include <deque>
#include <iostream>
using namespace std;
class R {
public:
R(){};
~R(){};
inline void queue(R* r) { neighbours.push_back(r); }
//Here is your error, look at the return : you need to dereference your neighbours.front():
inline R& getFirstNeighbour() { return *neighbours.front(); }
virtual void printSomething() { cout << "R" << endl; }
protected:
deque<R*> neighbours;
};
class RD: public R {
public:
RD(){};
~RD(){};
void printSomething() { cout << "RD" << endl; }
void doSomethingElse();
};
int main()
{
R r;
//R with 3 neighbors
r.queue(new RD());
r.getFirstNeighbour().printSomething(); // Printing RD :)
return 0;
}