cpp链接器失败,无法跟踪错误源

时间:2016-01-08 07:52:02

标签: c++ linker-errors

我对cpp相对较新,我偶然发现了我无法追踪的链接器故障。

我正在尝试Google Test,我尝试将内联标头示例(sample-3inl.h)重写为单独的源和头文件。

我的文件夹结构如下所示:

Project structure:
├── src
│   ├── queue.cpp
│   ├── queue.h
│   ├── CMakeLists.txt
├── test
│   ├── lib
│   │   ├── gtest
│   │   │   ├── googletest   
│   ├── unit_test
│   │   ├── unit_test.cpp
│   │   ├── CMakeLists.txt
│   ├── CMakeLists.txt
├── main.cpp
├── CMakeLists.txt

Google Test工作正常,我已尝试使用原始sample-3inl.h

Linker failiure错误:

Undefined symbols for architecture x86_64:
  "Queue<int>::Enqueue(int const&)", referenced from:
      QueueTest::SetUp() in dummy.cpp.o
  "Queue<int>::Queue()", referenced from:
      QueueTest::QueueTest() in dummy.cpp.o
  "Queue<int>::~Queue()", referenced from:
      QueueTest::QueueTest() in dummy.cpp.o
      QueueTest::~QueueTest() in dummy.cpp.o
  "Queue<int>::Size() const", referenced from:
      QueueTest_IsEmptyInitially_Test::TestBody() in dummy.cpp.o
ld: symbol(s) not found for architecture x86_64
为简单起见,可以在以下page找到

源代码(myqueue.cpp,myqueue.h和unit_test.cpp)。

试图找出导致错误几个小时的原因,但我无法找到它,真的想知道我做错了什么。 感谢您提前的时间。

1 个答案:

答案 0 :(得分:4)

  

我正在尝试使用Google Test,我尝试将内联标头示例(sample-3inl.h)重写为单独的源文件和头文件。

你不能用模板做到这一点。有关详细信息,请参阅Why can templates only be implemented in the header file?