C++多重定义

C++ Multiple definition

本文关键字:定义 C++      更新时间:2023-10-16

所以我有一个头文件,里面有函数实现和原型。我现在正试图将这些实现从文件中分离出来,只留下原型,因为我知道将实现放在头文件中不是一个好标准。然而,当我从头文件中删除实现并将它们放在自己的cpp文件中,然后尝试将该cpp文件链接到项目的其余部分时,它会抱怨函数的多个定义。感谢的任何帮助/建议

std::bitset<LENGTH>  foo1(const std::string stringVal);
std::bitset<LENGTH>  foo2(const int decimalVal);
std::string          foo3(const int integerVal);

我有一个包含保护,所以它不会被包含不止一次。

然后在cpp中,我只简单地实现了这些函数。然而,如果函数与头文件分离,它会抱怨函数的多个定义。

编辑:我犯了一个愚蠢的错误,这个问题解决了。

这只是一个声明。即使该文件没有include保护,也不会出现错误。

多重定义通常意味着在多个实现文件中定义函数。

这是一个清单:

  • 确保实现明确地位于标头之外。

  • 确保只有一个源文件定义功能

  • 确保你没有包括源文件(这是微不足道的,我希望你知道不要这样做)

  • 最后,检查您是否运行了一个干净的构建

我猜您没有编译之前包含头文件的其他cpp文件。因此,对象文件仍然包含定义。顺便说一句,在头文件中没有实现根本不是好的标准。这是必须的,这样您就可以在多个编译单元中包含相同的头。