错误C2512没有合适的默认构造函数,即使我有一个
Error C2512 No appropriate default constructor even though I have one?
通过向符号结构添加默认构造函数来解决问题,但我也想问,如果可能的话,为什么会调用默认构造函数。如果没有,那也没关系。谢谢
我正试图写一个树,但当我定义一个节点时,如下所示:
TreeNode<SymbolPriority>* treeRoot =
new TreeNode<SymbolPriority>(SymbolPriority('a', 1));
我不能编译,它抛出了一个Error c2512 'SymbolPriority': no default appropriate default constructor
;然而,在我的结构中,我有一个我试图使用的构造函数,而且我以前也使用过它,所以我不知道发生了什么。
我试过这个:
SymbolPriority aSymbol( 'a', 1 );
TreeNode<SymbolPriority>* treeRoot = new TreeNode<SymbolPriority> (aSymbol);
但它也不起作用。
我把相关代码放在下面:
template<typename DATA_TYPE> struct TreeNode
{
TreeNode(const DATA_TYPE& value, TreeNode* left = NULL, TreeNode* right = NULL)
{
Value = value;
Left = left;
Right = right;
}
DATA_TYPE Value;
TreeNode* Left;
TreeNode* Right;
bool IsLeaf() const
{
return Left == NULL && Right == NULL;
}
};
和
struct SymbolPriority
{
SymbolPriority(char aSymbol, int priority){
Symbol = aSymbol;
Priority = priority;
};
char Symbol;
int Priority;
bool operator > (const SymbolPriority& compareTo) const{
return (Priority > compareTo.Priority );
};
bool operator < (const SymbolPriority& compareTo) const{
return !( *this > compareTo);
};
bool operator==(const SymbolPriority& compareTo) const{
return (Priority == compareTo.Priority );
};
};
默认构造函数用于初始化对象,而不使用参数。要解决此问题,只需输入:
TreeNode() { // NO PARAMETERS
... // default initializing variables, or whatever you'd like
}
在您的结构、类和任何其他结构中,如果它们是在没有参数的情况下声明的。
如果你想听到更多关于"默认构造函数"的概念。
有相当多的stackoverflow问题与错误:C2512有关
考虑一下:错误C2512:没有合适的默认构造函数可用
Wikipedia恰好在这里对默认构造函数的必要性给出了很好的解释。
一些值得注意的目的是:
- "当对象数组被声明时,例如MyClass x[10];;或被动态分配时,例如新的MyClass[10];默认构造函数用于初始化所有元素"
- "当对象值在没有参数列表的情况下声明时,例如MyClass x;;或在没有参数表的情况下动态分配时,例如new MyClass或new MyClass();默认构造函数用于初始化对象"
- "当派生类构造函数没有显式调用其初始值设定项列表中的基类构造函数时,基类的默认构造函数被调用"
最后一个对继承很重要。
相关文章:
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 关于复制构造函数的一个棘手问题
- C++构造函数,一个用于度,一个用于弧度
- 在成员初始值设定项列表和构造函数主体中委派构造函数有什么区别
- 关于QLIST类型实例复制构造函数的一个奇怪问题
- 删除默认类构造函数有什么意义?
- 如何应用使默认构造函数有条件地显式
- 两种类型的定义构造函数有什么区别?第一个使用":",第二个用大括号(如函数)定义它
- SquareMatrix 的 ADT 构造函数有什么问题?
- 需要使班级(long_number)用构造函数和一个打印功能代表1到60的任何长度
- 运算符 = 不匹配,构造函数创建一个指针
- 双重列表复制构造函数:与单一列表复制构造函数有何不同
- 为什么我不能在 c++ 类中声明一个空构造函数,该构造函数从一个具有私有构造函数的构造函数扩展而来
- 如何使构造函数接受一个非常量对象
- 初始值设定项列表,可变参数模板和构造函数推导:一个奇怪的情况
- shared_ptr的原始指针构造函数是一个错误吗?
- 通过初始化列表调用另一个类的构造函数.有问题
- 一个非平凡的复制构造函数有什么作用
- 有一个转换构造函数有什么意义?
- 按值传递给函数和按值传递给另一个构造函数时,调用构造函数有什么不同?