我目前正在编写一个树类,并希望实现一个构造函数来创建具有一定维度和深度的树:
public:
tree(); // empty constructor
tree(int dimension, int depth); // constructing an empty tree
// ...
void newNode(node<T>* const&, T const&);
// ...
private:
unsigned int mNumNodes;
node<T> *mRoot;
template<typename T>
tree<T>::tree(int dimension, int depth):
// member vars
{
// other constructing stuff
this->newNode(0, parent);
}
显然这样的事情是不可能的,但是当我写一个很好的工作函数来向具有特定值的特定父级添加新节点时,使用它会很好。
但是:此方法需要访问当前对象。
也许有某种解决方案适合我,既没有指向obj是可能的,也没有任何其他类型的访问。
答案 0 :(得分:3)
问题不在于构造函数。在执行点进入构造函数的主体时,该对象被构造为tree<std::basic_string<char> >
。这意味着您可以在构造函数的主体中将该对象用作该类的实例。
在构造函数中使用对象的问题是,正在构造的实际对象是手头类的派生类。这是在父类的构造函数中尚不存在的知识。最好不要在构造函数中调用虚函数。通常可以在构造函数中调用非虚拟成员函数。另一个问题是派生类构造函数可能会改变父类中的内容。
这不是这里发生的事情。这里的问题是使用零作为node<T>* const&
。这段时间不起作用。如果它确实有效,你可以改变零值。
根据您发布的不完整代码,在newNode
的第一个参数的声明中删除&符号就可以了。