我已经很久没有进行任何 C++ 编程了,如果有人能指导我创建一个 Node 类,该类的私有变量之一是 Node 类的对象列表(或向量),我将不胜感激。
我希望创建一个这样的类结构:
class Node {
private:
string ID;
vector < Node > list;
public:
Node();
void some_Function();
};
这是正确的方法吗?一个类是否可以将其私有成员之一作为相同类类型的对象列表?
你不能。
当你定义一个类型的对象时vector<T>
,T
它必须是一个完整的类型,直到类定义结束。
一些编译器无论如何都会接受代码(他们会接受一些不完整类型的向量),但 C++ 标准不允许这样做。
您不能直接在单个班级中执行此操作。但是您可以使用CRTP,这是专门针对此类情况的。
您将拥有一个模板基类和一个以它自己的类型为模板的派生类。然后基类可以vector
根据派生类自由定义其他泛型(如 a )。下面的示例代码:
#include <vector>
using namespace std;
template <typename Derived>
class Base{
vector<Derived> nodes;
public:
void TestInsert(const Derived& der){
nodes.push_back(der);
}
void TestPrintSize(){
printf("NUM %d\n", nodes.size());
}
};
class Derived1 : public Base<Derived1>{};
int main(){
Derived1 der1, der2;
der2.TestInsert(der1);
der2.TestPrintSize();
}
是的,您可以通过使用指针或引入辅助类:
class NodeVector;
class Node {
private:
string ID;
NodeVector *vect;
public:
Node() : vect(new NodeVector) { }
// Don't forget other constructors & destructor because you allocate vect
};
class NodeVector {
public:
std::list< Node >;
};
正如杰瑞所说。你不能。
这不一样
class node {
int data;
node *next;
}
使用 node *,编译器只需要知道指针的大小。但是vector<T>
编译器需要知道你的类的大小,T
直到类定义结束才定义。