1>shuduku.obj : error LNK2005: "bool __cdecl complare(int,int)" (?complare@@YA_NHH@Z) 已经在 button.obj 中定义
时间: 2024-05-05 13:21:19 浏览: 121
这个错误提示是由于两个或多个目标文件中都定义了同名的函数或变量,导致链接器无法判断应该使用哪一个。在你的代码中,`complare`函数在`shuduku.obj`和`button.obj`两个目标文件中都被定义了,所以链接器出现了冲突。
解决这个问题有两种方法:
1. 将`complare`函数定义放到头文件中,并在所有需要使用它的源文件中包含该头文件,这样每个源文件都可以使用同一个定义。例如,可以在`complare.h`中定义:
```c++
#ifndef COMPLARE_H
#define COMPLARE_H
bool complare(int a, int b);
#endif
```
然后在`shuduku.cpp`和`button.cpp`中都包含该头文件:
```c++
#include "complare.h"
```
这样就可以避免重复定义的问题。
2. 如果你确信`complare`函数在所有目标文件中都应该使用相同的定义,那么可以将其定义放到一个单独的源文件中,例如`complare.cpp`:
```c++
#include "complare.h"
bool complare(int a, int b) {
// ...
}
```
然后在编译时只编译一次该源文件,将生成的目标文件链接到其他源文件中即可。例如,可以在命令行中这样编译:
```
g++ -c shuduku.cpp
g++ -c button.cpp
g++ -c complare.cpp
g++ -o shuduku shuduku.o button.o complare.o
```
这样就可以避免重复定义的问题。
阅读全文