编辑:这不是标题中未定义模板的问题。此错误是由于未定义复制构造函数引起的。
我试过谷歌搜索这个但是我找不到任何东西,除了人们调用函数的问题没有适当的参数和这些方面的东西。所以,这里是一个非常小的主要部分。我创建了一个模板化的容器类,并将测试初始化为一个用于保存字符串的测试。 sorted.h包含在.cpp文件中。
// Test assignment operator
// Can test copy constructor by changing following two lines to
// sorted<string> test(songs);
sorted<string> test;
test = songs; // Error occurs when commenting this line back in.
这是我重载的赋值运算符。我认为这是导致问题的原因,因为注释将使用它的行是导致链接器错误的原因。任何人都知道我在这里做错了什么?
//Overloaded assignment operator. (sorted.cpp)
template <class T>
sorted<T> sorted<T>::operator=(const sorted<T>& srtd){
if (this != &srtd){
delete [] m_data;
delete [] m_randfinal;
m_data = new T[srtd.m_capacity];
m_randfinal = new T[srtd.m_size];
m_size = srtd.m_size;
m_capacity = srtd.m_capacity;
for (int i = 0; i < m_size; i++){
m_data[i] = srtd.m_data[i];
m_randfinal[i] = srtd.m_randfinal[i];
}
}
return *this;
}
sorted.h中的声明。
// Overloaded assignment operator
sorted<T> operator=(const sorted<T>& srtd);
答案 0 :(得分:0)
链接器错误消息表明代码需要调用复制构造函数,但无法找到它。如果您自己定义了任何构造函数,请记住隐式复制构造函数将被禁用,您需要自己定义一个。
另外,请记住,模板化类的实现必须位于头文件中,以便编译器正确实例化它们。