所以我有一个头文件,里面有函数实现和原型。我现在正试图将这些实现与文件分开,只留下原型,因为我知道在头文件中实现它们并不是很好的标准。但是,当我从头文件中删除实现并将它们放在自己的cpp文件中然后尝试将该cpp文件链接到项目的其余部分时,它会抱怨函数的多个定义。感谢您的帮助/建议
std::bitset<LENGTH> foo1(const std::string stringVal);
std::bitset<LENGTH> foo2(const int decimalVal);
std::string foo3(const int integerVal);
我有一个包含警戒,所以它也不会被包括在内。
然后在cpp中我简单地将这些函数的实现简单化了。然而,如果它们与头文件分开,它会抱怨函数的多个定义。
编辑:我这个愚蠢的错误已经解决了。
答案 0 :(得分:1)
这只是一个声明。即使该文件没有包含防护,也不会出现该错误。
多重定义通常意味着您要在多个实现文件中定义该函数。
这是一份清单:
确保实现是在标题之外定义的。
确保只有一个源文件定义了函数
请确保您不包含源文件(这个文件很简单,我希望您知道不要这样做)
最后,检查您是否运行了干净的构建
答案 1 :(得分:0)
我猜你没有编译之前包含头文件的其他cpp文件。因此目标文件仍包含定义。顺便说一句,没有头文件中的实现根本不是关于良好的标准。这是必须的,因此您可以在多个编译单元中包含相同的标头。