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;
}

'Queue.hpp':

#ifndef QUEUE_HH__
#define QUEUE_HH__

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

#endif

および'Queue.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>;

..正常にコンパイルされます。

詳細な説明については、最初に述べたURLを参照してください。

于 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 に答える