c – 将函数添加到先前链接文件后的多个定义链接器错误

前端之家收集整理的这篇文章主要介绍了c – 将函数添加到先前链接文件后的多个定义链接器错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我的程序运行正常.编译,链接,运行,工作.然后,我决定在我的一个文件添加一个简单的函数,如下所示:
#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

函数定义是我对代码所做的唯一更改.其他一切与现在完全一样.什么都没有叫它.我编译,它无法链接,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)':

如果我评论出isVowel,它会再次起作用.我已经尝试重命名它,仍然无法正常工作.我尝试用void randomFunctionName(){}替换它,仍然无法正常工作.我试过让它非内联并将函数体放在Utility.cpp中,仍然无法正常工作.我非常困惑.为什么添加一个简单的函数会搞砸链接器?

解决方法

声明函数内联,或在单独的.cpp文件中定义它.否则,您在其中包含标头的每个C文件都会尝试创建自己的,公开可用的函数定义.

编辑:和fwiw,如果您正在测试条件,则不需要显式返回true或false.只需返回条件本身:

inline bool isVowel(const char c)
{
    return (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u');
}

猜你在找的C&C++相关文章