奇怪的未定义参考错误

时间:2016-05-05 21:55:36

标签: c++ operator-overloading

编辑:这不是标题中未定义模板的问题。此错误是由于未定义复制构造函数引起的。

我试过谷歌搜索这个但是我找不到任何东西,除了人们调用函数的问题没有适当的参数和这些方面的东西。所以,这里是一个非常小的主要部分。我创建了一个模板化的容器类,并将测试初始化​​为一个用于保存字符串的测试。 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);

1 个答案:

答案 0 :(得分:0)

链接器错误消息表明代码需要调用复制构造函数,但无法找到它。如果您自己定义了任何构造函数,请记住隐式复制构造函数将被禁用,您需要自己定义一个。

另外,请记住,模板化类的实现必须位于头文件中,以便编译器正确实例化它们。