C ++:未定义引用,但似乎一切正常

问题描述 投票:0回答:1

我设法分配了学校,并且一切正常。

我完成了头文件中的所有功能,并计划在一切正常后将它们移至cpp文件。但是,当我将函数的定义保留在头文件中并将函数主体放在cpp文件中时,它就无法工作。

我收到此错误:Undefined reference to ...

它告诉我找不到函数。

这是一个makefile项目,该makefile由老师提供,并生成类的.o文件。

我将.h文件导入到主文件中。当所有内容都放在此头文件中时,它都可以正常运行,但是当我将其移至.cpp文件时,它不再可用。

我感觉我的makefile错误,但是我不知道是什么。

这里是makefile:https://pastebin.com/T4MmzpcK

有问题的文件是MyArray.h和MyArray.cpp。

我将努力解决问题,因此,如果您还有其他问题,我会立即与您联系

[编辑]这是更多信息:

以这个.h文件中定义的功能为例:https://pastebin.com/pTjNGtFb

并且代码在此.cpp文件中:https://pastebin.com/jhLae9Ps

当我调用该函数时出现错误:

obj/test.o: In function `main':
test.cpp:(.text+0x665): undefined reference to `MyArray<int>::elementAt(unsigned int)'
test.cpp:(.text+0x69b): undefined reference to `MyArray<int>::elementAt(unsigned int)'
test.cpp:(.text+0x77f): undefined reference to `MyArray<int>::elementAt(unsigned int)'
test.cpp:(.text+0x792): undefined reference to `MyArray<int>::elementAt(unsigned int)'
test.cpp:(.text+0x7a9): undefined reference to `MyArray<int>::elementAt(unsigned int)'
obj/test.o:test.cpp:(.text+0x7bc): more undefined references to `MyArray<int>::elementAt(unsigned int)' follow
collect2: error: ld returned 1 exit status
make: *** [bin/test] Error 1

我一直在找几个小时,但我找不到问题所在。

我放的时候可以用

template class MyArray<int>;

在文件的目录处,但是这样做似乎是错误的

c++ makefile
1个回答
0
投票

如果您的项目不是很大,则无需将类分为标头和实现。对于图书馆开发人员而言,当他们不想每次发生一点变化时都编译整个源代码,或者不想向其客户公开内部实现时,情况就更是如此。无论如何,您可以通过两种方式进行编译-分别进行编译和一次编译。并且根据您的代码,您可能会得到一些“奇怪”的结果,如我在此处提出的问题之一所述:C++ static instance of a user-defined class results a double-call to constructor when compiled and linked in separate steps

我相信问题出在您的makefile中,所以我建议您首先使用命令行手动进行编译,一旦情况良好,就可以相应地调整makefile。

© www.soinside.com 2019 - 2024. All rights reserved.