0
编辑:这不是没有在头中定义模板的问题。此错误是由于未定义复制构造函数而造成的。奇怪的未定义参考错误
我试着用谷歌搜索这个,但我找不到任何东西,除了人们调用没有合适的参数和沿着这些线条的东西的事情的问题。所以,这里有一个来自main的非常小的块。我创建了一个模板化的容器类,并将其初始化为一个包含字符串的测试。 sorted.h包含在两个.cpp文件中。
错误的位置:http://imgur.com/OvdCHFO
// 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);
模板类的实现必须位于标题中,以便编译器正确地实例化它们。 –
是的,我们被教会在头部的底部包含cpp文件以避免这种情况。教授说这在技术上并不是一个好的做法,但它暂时解决了这个问题。不过,我的计划中的其他一切都在努力。 – swingonaspiral
我试着将它移动到头文件,但没有骰子。 – swingonaspiral