【发布时间】:2018-02-23 02:43:59
【问题描述】:
我在使用 makefile 编译 C++ 代码时遇到了一个奇怪的问题。代码首先完美编译。然后我将一个函数参数更改为“const”。如果我随后编译,当代码尝试使用我将参数更改为 const 的函数时,我将收到错误消息。这可以通过删除所有 .o 文件然后再次编译来解决,但我很好奇首先是什么导致了这个问题。我的文件是:
MyClass.h
class MyClass {
public:
void fun(double*const c);
};
MyClass.cpp
#include "MyClass.h"
void MyClass::fun(double *const c){
};
Main.cpp
#include "MyClass.h"
int main(int argc,char* argv[]) {
MyClass foo;
double *bar=new double[2];
foo.fun(bar);
};
生成文件
all: main
main: Main.o MyClass.o
g++ -o a.out Main.o MyClass.o
Main.o: Main.cpp
g++ -c Main.cpp
MyClass.o: MyClass.cpp
g++ -c MyClass.cpp
如果我现在首先运行 make,一切正常。但是后来我把fun的签名改成fun(const double *const c),我收到了错误信息
Main.cpp:(.text+0x3b): undefined reference to `MyClass::fun(double*)'
collect2: error: ld returned 1 exit status
Makefile:6: recipe for target 'main' failed
make: *** [main] Error 1
但是,如果我删除所有 .o 文件,然后再次运行 make,它会编译。
【问题讨论】:
标签: c++ makefile compiler-errors ld