3

我有这个错误:

Undefined symbols for architecture x86_64:
  "my::Queue<int>::Queue()", referenced from:
      _main in ccdwI88X.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

对于此代码“main.cpp”:

#include "Queue.hpp"

int main()
{
  my::Queue<int> myqueue;
  return 0;
}

'队列.hpp':

#ifndef QUEUE_HH__
#define QUEUE_HH__

namespace my
{
  template <typename T>
  class Queue
  {
  public:
    Queue();     
  };
}

#endif

和“队列.cpp”:

#include "Queue.hpp"

template <typename T>
my::Queue<T>::Queue() 
{
}
4

2 回答 2

5

此处发布的答案:https ://stackoverflow.com/a/312402/700926是我认为您需要的。

如果我将您的Queue.cpp文件编辑为此:

#include "Queue.hpp"

template <typename T>
my::Queue<T>::Queue() 
{

}

template class my::Queue<int>;

..它编译得很好。

详细解释请参考我最开始提到的网址。

于 2012-04-21T23:06:59.527 回答
1

使用模板时最简单和最安全的做法是始终将类函数定义(实现)放在.hpp文件中,而不是放在单独的.cpp文件中。

所有细节也在这里: http: //www.parashift.com/c++-faq-lite/templates.html#faq-35.12

于 2012-04-21T23:27:33.860 回答