C++ 为什么编译器(g+;+;)找不到第一个add函数?
我试图替换为C++ 为什么编译器(g+;+;)找不到第一个add函数?,c++,g++,overloading,function-templates-overloading,C++,G++,Overloading,Function Templates Overloading,我试图替换为add(root,newsbtnode(key,value)),编译器只是告诉我是错的 error: no matching function for call to 'SBTree<row_col, int>::add(SBTNode<row_col, int>*&, SBTNode<row_col, int>*)' void add(Key& key,Value& value) { add(root,new SB
add(root,newsbtnode(key,value))代码>,编译器只是告诉我是错的
error: no matching function for call to 'SBTree<row_col, int>::add(SBTNode<row_col, int>*&, SBTNode<row_col, int>*)'
void add(Key& key,Value& value) { add(root,new SBTNode<Key,Value>(key,value));}
^~~
note: candidate: 'void SBTree<Key, Value>::add(Key&, Value&) [with Key = row_col; Value = int]'
void add(Key& key,Value& value) { add(root,new SBTNode<Key,Value>(key,value));}
错误:应在“,”标记之前使用主表达式
void add(Key&Key,Value&Value){add(root,new SBTNode(Key,Value));}
^
错误:在“>”标记之前应该有主表达式
void add(Key&Key,Value&Value){add(root,new SBTNode(Key,Value));}
当我给两个函数起不同的名字时,一切正常,在这种情况下函数重载有什么问题?要调用由成员函数隐藏的全局add函数,请在函数调用前加上::(全局范围运算符)
模板
类SBTree
{
//...
无效添加(键和键、值和值){
::添加(根,新SBTNode(键,值));
}
};
请做一个简单的回答。我无法编译您的代码,如图所示。从问题的描述来看,当查找到成员函数add
时,查找似乎停止了,并且它不会一直在全局范围内查找另一个add
。
error: no matching function for call to 'SBTree<row_col, int>::add(SBTNode<row_col, int>*&, SBTNode<row_col, int>*)'
void add(Key& key,Value& value) { add(root,new SBTNode<Key,Value>(key,value));}
^~~
note: candidate: 'void SBTree<Key, Value>::add(Key&, Value&) [with Key = row_col; Value = int]'
void add(Key& key,Value& value) { add(root,new SBTNode<Key,Value>(key,value));}
error: expected primary-expression before ',' token
void add(Key& key,Value& value) { add<Key,Value>(root,new SBTNode<Key,Value>(key,value));}
^
error: expected primary-expression before '>' token
void add(Key& key,Value& value) { add<Key,Value>(root,new SBTNode<Key,Value>(key,value));}