架构x86_64错误的未定义符号

Beb*_*oix 3 c++ linker

我有这个错误:

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
Run Code Online (Sandbox Code Playgroud)

对于此代码'main.cpp':

#include "Queue.hpp"

int main()
{
  my::Queue<int> myqueue;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

'Queue.hpp':

#ifndef QUEUE_HH__
#define QUEUE_HH__

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

#endif
Run Code Online (Sandbox Code Playgroud)

和'Queue.cpp':

#include "Queue.hpp"

template <typename T>
my::Queue<T>::Queue() 
{
}
Run Code Online (Sandbox Code Playgroud)

Las*_*sen 5

答案发布在这里:https://stackoverflow.com/a/312402/700926是我认为你需要的.

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

#include "Queue.hpp"

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

}

template class my::Queue<int>;
Run Code Online (Sandbox Code Playgroud)

..它编译得很好.

有关详细说明,请参阅我刚才提到的URL.