gpt4 book ai didi

c++ - 函数错误的多重定义,即使在使用#if 保护子句时也是如此

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:03:03 24 4
gpt4 key购买 nike

我正在为我的 C++ 项目创建一个包含 aplusb(int, int) 函数的简单 UTIL.h 文件。但是我无法编译,错误消息是关于 `aplusb(int, int)' 的多重定义。你能帮我改正错误或给我一些提示吗?

我在这里附上我的项目供您详细引用。

文件 UTIL.h

#ifndef UTIL_H_
#define UTIL_H_

int aplusb(int a, int b) {
return a + b;
}

#endif /* UTIL_H_ */

文件ClassA.h

#ifndef CLASSA_H_
#define CLASSA_H_

class ClassA {
public:
ClassA();
virtual ~ClassA();
private:
int sum;
};

#endif /* CLASSA_H_ */

文件ClassA.cpp

#include "ClassA.h"
#include "UTIL.h"

ClassA::ClassA() {
// TODO Auto-generated constructor stub
sum = aplusb(3,5);

}

ClassA::~ClassA() {
// TODO Auto-generated destructor stub
}

文件ClassB.h

#ifndef CLASSB_H_
#define CLASSB_H_

class ClassB {
public:
ClassB();
virtual ~ClassB();
private:
int sum;
};

#endif /* CLASSB_H_ */

文件类B.cpp

#include "ClassB.h"
#include "UTIL.h"

ClassB::ClassB() {
// TODO Auto-generated constructor stub
sum = aplusb(5,6);
}

ClassB::~ClassB() {
// TODO Auto-generated destructor stub
}

编译错误信息

ClassB.o: In function `aplusb(int, int)':
/home/vtvan/Desktop/workspace/commonfunc/UTIL.h:11: multiple definition of `aplusb(int, int)'
ClassA.o:/home/vtvan/Desktop/workspace/commonfunc/UTIL.h:11: first defined here
collect2: error: ld returned 1 exit status
make: *** [commonfunc] Error 1

最佳答案

第一种变体 - 使用 inline 说明符

#ifndef UTIL_H_
#define UTIL_H_

inline int aplusb(int a, int b) {
return a + b;
}

#endif /* UTIL_H_ */

第二种变体 - 在 .cpp 文件中写入定义。

关于c++ - 函数错误的多重定义,即使在使用#if 保护子句时也是如此,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16396130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com