如何调用 C++ 中另一个类中的类的构造函数
How to call constructor of a class that is within another class in C++?
这是我的代码:
template<class Datatype>
class Node
{
public:
Node()
{
next = NULL;
prev = NULL;
}
Node* getNext()
{
return next;
}
Node* getPrev()
{
return prev;
}
Datatype* getData()
{
return &data;
}
void changeNext()
{
next = NULL;
}
void changeNext(Node& nextNode)
{
next = &nextNode;
}
void changePrev()
{
prev = NULL;
}
void changePrev(Node& prevNode)
{
prev = &prevNode;
}
Node* addNext(Node &);
Node* addPrev(Node &);
void nodeDel();
void addData(Datatype &);
private:
Node* next;
Node* prev;
Datatype data;
};
template<class Datatype>
class Stack
{
public:
Stack()
{
node.Node();
}
int push(Datatype &);
Datatype pop();
Datatype* peek();
private:
Node<Datatype> node;
};
编译错误是这样的:
my_node.h: In constructor ‘Stack<Datatype>::Stack() [with Datatype = float]’:
test.cpp:8:15: instantiated from here
my_node.h:58:4: error: invalid use of ‘Node<float>::Node’
一开始,我没有为 Stack 编写构造函数。但是,我觉得实际上我没有调用我定义的节点的构造函数,因为 next 和 prev 指针中有一些值。所以我尝试编写一个显式调用 Node 构造函数的 Stack 构造函数。不幸的是,上面显示的编译错误来了。我想知道如何调用另一个类中的类的构造函数。
谢谢Kevin Zhou
这个:
Stack()
{
node.Node();
}
不是调用成员构造函数的正确方法。请改用初始化列表:
Stack(): node()
{
}
应该注意的是,显式调用默认构造函数是不必要的。这意味着只有在调用自定义构造函数时才真正需要使用初始化列表。
如果不执行任何操作,则将调用node
成员的默认构造函数。
如果要显式构造成员,请在构造函数初始值设定项列表中执行此操作:
Stack()
: node()
{}
由于无论如何都会调用默认构造函数,因此显式构造成员仅在需要将参数传递给构造函数(即调用其非默认构造函数)时才有用。
只需更改类的定义 按以下方式堆叠,因为您对类的定义是错误的
template<class Datatype>
class Stack
{
public:
Stack() : head( nullptr )
{
}
int push(Datatype &);
Datatype pop();
Datatype* peek();
private:
Node<Datatype> *head;
};
考虑到堆栈节点应该只有一个对下一个节点的引用。所以类节点应该有以下数据成员
class Node
{
//...
private:
Node* next;
Datatype data;
};
应排除数据成员节点 *prev。
所以如果类节点是类 STack 的内部类会好得多。
相关文章:
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 关于复制构造函数的一个棘手问题
- C++构造函数,一个用于度,一个用于弧度
- 关于QLIST类型实例复制构造函数的一个奇怪问题
- 需要使班级(long_number)用构造函数和一个打印功能代表1到60的任何长度
- 运算符 = 不匹配,构造函数创建一个指针
- 为什么我不能在 c++ 类中声明一个空构造函数,该构造函数从一个具有私有构造函数的构造函数扩展而来
- 如何使构造函数接受一个非常量对象
- 初始值设定项列表,可变参数模板和构造函数推导:一个奇怪的情况
- shared_ptr的原始指针构造函数是一个错误吗?
- 当这个构造函数接受一个初始值设定项列表并委托一个向量时,是什么导致它委托给自己
- C++11使variadic构造函数了解一个初始化列表的初始化列表
- 为什么这个initializer_list构造函数是一个可行的重载
- 为什么我的Arduino类构造函数需要一个参数
- 内联构造函数和一个定义规则
- 如何通过构造函数将一个类的实例传递给另一个类
- 如何用g++构造在另一个文件中定义的类
- 在另一个类中使用自定义构造函数声明一个类
- 如何从另一个构造函数调用一个c++类的构造函数
- 模板中的构造函数不同:一个用于字符串,另一个用于其他任何东西