以下是文件的内容。首先是模板类: 在.h文件中:
template <class T>
class templatedClass
{
public :
templatedClass(T val);
~templatedClass() {}
void writeV();
T v;
};
<。>在.cpp文件中:
template <class T>
templatedClass<T>::templatedClass(T val)
{
v = val;
}
template <class T>
void templatedClass<T>::writeV()
{
std::cout << v << std::endl;
}
构建时一切都很好。
现在继承的类: 在.h文件中:
class inheritedClass : public templatedClass<float>
{
public :
inheritedClass(float val);
~inheritedClass() {}
void write();
};
<。>在.cpp文件中:
inheritedClass::inheritedClass(float val)
: templatedClass<float>(val)
{
}
void inheritedClass::write()
{
writeV();
}
构建时,我收到以下链接错误:
Undefined symbols for architecture x86_64:
"templatedClass<float>::writeV()", referenced from:
inheritedClass::write() in inheritedClass.o
"templatedClass<float>::templatedClass(float)", referenced from:
inheritedClass::inheritedClass(float) in inheritedClass.o
我的代码出了什么问题?我是否可以在XCode中使用特殊的构建选项来取得成功?
感谢您的回答。
答案 0 :(得分:0)
您缺少模板类实例化问题。要解决它,您应该将模板实现代码放在头文件中。我的意思是,这部分:
template <class T>
templatedClass<T>::templatedClass(T val)
{
v = val;
}
template <class T>
void templatedClass<T>::writeV()
{
std::cout << v << std::endl;
}
还有其他选项,例如保留单独的模板实现文件并将其包含在其他cpp文件中,或者将类模板实例化到其他地方......
有关详细信息,请参阅Why can templates only be implemented in the header file?或class template instantiation。