我在C ++中实现了一个Red-Black树,并希望对任何类型的输入使用模板化的类。这就是我在标题中的内容:
template <class T>
class RBtree{
public:
RBtree();
~RBtree();
//...
private:
//...
};
在.cpp文件中:
RBtree::RBtree(){
//...
}
//...
当我尝试在Xcode中编译时,我收到“Expected a class or namespace”的错误,但是不是已在头文件中定义的构造函数?我的.cpp文件中的所有方法实现也会出错。
编辑:Yochai的回答是正确的。
答案 0 :(得分:2)
首先,模板类的函数实现必须对使用它的任何代码“可见” 所以你应该在头文件中实现模板类。
其次,正确的语法是:
template <class T>
RBtree<T>::RBtree(){
//...
}
//...
答案 1 :(得分:0)
编译器必须知道每个类型T的实例化模板类的实现。您可以将所有代码放入.hpp或包含.hpp中的.cpp。还有其他技术可以进行单独编译。
答案 2 :(得分:0)
尝试
template <class T>
RBtree<T>::RBtree(){ ... }
所有其他功能的布局相同。如果仍然得到未定义的引用,那么将函数放入.h中,以便编译器可以找到它们。
答案 3 :(得分:0)
它是模板的常见问题。尝试将您的实现移动到头文件中或在defing时实现该功能。这将解决您的问题。
有关详细信息,请访问:Why templates needs to be implemented only in the header file?