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

cpp linker failed, can't trace source of error

本文关键字:跟踪 错误 链接 失败 cpp      更新时间:2023-10-16

我是cpp的新手,我偶然发现了一个无法跟踪的链接器故障。

我正在尝试GoogleTest,并试图将内联头样本(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

谷歌测试工作得很好,我已经用原始样本3inl.h 进行了尝试

链接器故障错误:

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

为了简单起见,源代码(myqueue.cpp、myqueue.h和unittest.cpp)可以在下面的页面上找到。

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

我正在尝试GoogleTest,并试图将内联头样本(sample-3inl.h)重写为一个单独的源文件和头文件。

使用模板无法做到这一点。有关更多信息,请参阅为什么模板只能在头文件中实现?