【发布时间】:2017-06-12 19:54:58
【问题描述】:
我正在使用模板练习一些 C++ 继承概念。我写了这个基类:
template <typename type1, typename type2>
class baseClass {
private:
type1 member1;
type2 member2;
public:
baseClass() {};
baseClass(type1 member1, type2 member2):member1(member1), member2(member2) {};
type1 get_member1();
type2 get_member2();
~baseClass() {};
};
还有一个派生类:
template <typename type1, typename type2, typename type3>
class derivedClass : public baseClass<type1, type2> {
private:
type3 member3;
public:
derivedClass(){};
derivedClass(type1 member1, type2 member2, type3 member3): baseClass<type1, type2>(member1, member2), member3(member3){};
type3 get_member3();
};
我正在从主函数进行此操作:
int main(int argc, const char * argv[]) {
derivedClass<int, int, int> object(1, 2, 3);
cout << object.get_member1() << endl;
cout << object.get_member1() << " " << object.get_member2() << " " << object.get_member3() << endl;
}
当我尝试编译上述程序时,编译器出错。我尝试在网上搜索这个问题,但没有得到任何具体的答案。我是 C++ 模板的新手,还不知道如何处理它们。请帮我弄清楚。谢谢!
编辑:get_member* 方法的定义:
template <typename type1, typename type2>
type1 baseClass<type1, type2>::get_member1() {
return member1;
}
template <typename type1, typename type2>
type2 baseClass<type1, type2>::get_member2() {
return member2;
}
template <typename type1, typename type2, typename type3>
type3 derivedClass<type1, type2, type3>::get_member3() {
return member3;
}
【问题讨论】:
-
什么错误?链接器?
-
缺少
get_member1()和get_member2()的定义 -
嗯,是的,如果您在此处显示的代码就是您所拥有的,那么您缺少 get_... 方法的定义。
-
那些函数是在另一个cpp文件中定义的。
-
这是我得到的错误:
Undefined symbols for architecture x86_64: "derivedClass<int, int, int>::get_member3()", referenced from: _main in mainFile.o "baseClass<int, int>::get_member1()", referenced from: _main in mainFile.o "baseClass<int, int>::get_member2()", referenced from: _main in mainFile.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)
标签: c++ templates inheritance