C++ 派生专用模板类
我对模板类的派生有问题。 以下代码片段将显示我的问题:C++ 派生专用模板类,c++,templates,derived-class,derived,C++,Templates,Derived Class,Derived,我对模板类的派生有问题。 以下代码片段将显示我的问题: class object { } template <class T> class container { public: cotainer(void) { // do some work } } template <class in, class out> class stage { private: container<in> *input; con
class object {
}
template <class T>
class container {
public:
cotainer(void) {
// do some work
}
}
template <class in, class out>
class stage {
private:
container<in> *input;
container<out> *output;
public:
stage(bool input, container<out> *output) {
// do some other work
}
}
类对象{
}
模板
类容器{
公众:
科塔纳(无效){
//做些工作
}
}
模板
班级阶段{
私人:
容器*输入;
容器*输出;
公众:
阶段(布尔输入、容器*输出){
//做一些其他的工作
}
}
在那之后,我想从舞台上演绎。
如果派生类也是一个模板类(如:
template <class T>
class derived : public stage<T, T> {
public:
derived(container<T> *output) : stage<T, T>(false, output) {}
}
模板
派生类:公共舞台{
公众:
派生(容器*输出):阶段(false,输出){
}
但是,如果派生类是stage的一个特殊化,我会得到一个错误
class derived : public stage<object, object> {
public:
derived(container<object> *output) : stage<object, object>(false, output) {}
}
派生类:公共阶段{
公众:
派生(容器*输出):阶段(false,输出){
}
错误是,编译器没有找到stage的构造函数
undefined reference to `stage<object, object>::stage(bool, container<object>*)'
stage::stage(bool,container*)的未定义引用
如何解决此问题?这肯定不是您的代码(缺少分号、键入错误等),请您提供一个示例,可以编译到出现(链接器)错误的地方吗?在一个文件中为我编译(修复键入错误后)。我怀疑问题与您如何在头文件和源文件之间分发代码有关。同意@us2012,您很可能在
.cpp
文件中定义了类模板的成员函数(包括链接器似乎抱怨的构造函数)。如果是这种情况,请参阅并将这些成员函数定义移动到定义相应类模板的标题中。好的,谢谢。这对我来说很管用,但看起来又脏又笨。这是一个通用的编译器问题还是GCC的问题?@user好吧,请参阅Andy Prowl链接中投票数第二高的问题答案-您可以在定义模板的文件中显式实例化模板。但我不相信这是“清洁”的一般。