我设法分配了学校,并且一切正常。
我完成了头文件中的所有功能,并计划在一切正常后将它们移至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++ static instance of a user-defined class results a double-call to constructor when compiled and linked in separate steps
我相信问题出在您的makefile中,所以我建议您首先使用命令行手动进行编译,一旦情况良好,就可以相应地调整makefile。