解决方法是在符号struct中添加一个默认构造函数,但我想问一下为什么在可能的情况下调用默认构造函数。如果没有,那很好。感谢。
我正在尝试编写一个树,但是当我定义一个这样的节点时:
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 );
};
};
答案 0 :(得分:0)
默认构造函数用于在不使用参数的情况下初始化对象。 要解决此问题,只需输入:
TreeNode() { // NO PARAMETERS
... // default initializing variables, or whatever you'd like
}
在你的结构,类和任何其他语句中,如果它们是在没有参数的情况下声明的。
如果您想更多地了解"Default Constructors"的概念。
有很多与错误:C2512 相关的stackoverflow问题 考虑一下这个: error C2512: no appropriate default constructor available
Wikipedia 恰好对默认构造函数here的必要性给出了很好的解释。
一些值得注意的目的是:
最后一个对于继承很重要。