Max*_*Max 9 c++ linker-errors multiple-definition-error
所以我的程序运行正常.编译,链接,运行,工作.然后,我决定在我的一个文件中添加一个简单的函数,如下所示:
#ifndef UTILITY_HPP
#define UTILITY_HPP
/* #includes here. There's no circular include, I've checked. */
namespace yarl
{
namespace utility
{
(several function declarations and definitions)
bool isVowel(const char c)
{
if(c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u')
return true;
else return false;
}
}
}
#endif
Run Code Online (Sandbox Code Playgroud)
该函数定义是我对代码所做的唯一更改.其他一切与现在完全一样.什么都没有叫它.我编译,它无法链接,g ++为#includes这个文件的每个文件提供了这些错误之一:
./obj/Feature.o: In function `yarl::utility::isVowel(char)':
/home/max/Desktop/Development/Yarl Backup/yarl v0.27/src/Utility.hpp:130: multiple definition of `yarl::utility::isVowel(char)'
./obj/Events.o:/home/max/Desktop/Development/Yarl Backup/yarl v0.27/src /Utility.hpp:130: first defined here
./obj/GameData.o: In function `yarl::utility::isVowel(char)':
Run Code Online (Sandbox Code Playgroud)
如果我发表评论isVowel,它会再次发挥作用.我已经尝试重命名它,仍然无法正常工作.我试过用它替换它void randomFunctionName() {},仍然无法正常工作.我试过让它非内联并将函数体放在Utility.cpp中,仍然无法正常工作.我非常困惑.为什么添加一个简单的函数会搞砸链接器?
Cog*_*eel 20
声明函数内联,或在单独的.cpp文件中定义它.否则,您在其中包含标头的每个C++文件都会尝试创建自己的,公开可用的函数定义.
编辑:和fwiw,如果您正在测试条件,则不需要显式返回true或false.只需返回条件本身:
inline bool isVowel(const char c)
{
return (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u');
}
Run Code Online (Sandbox Code Playgroud)