C ++多重定义

时间:2012-01-19 20:49:34

标签: c++ header-files

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

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

我有一个包含警戒,所以它也不会被包括在内。

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

编辑:我这个愚蠢的错误已经解决了。

2 个答案:

答案 0 :(得分:1)

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

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

这是一份清单:

  • 确保实现是在标题之外定义的。

  • 确保只有一个源文件定义了函数

  • 请确保您不包含源文件(这个文件很简单,我希望您知道不要这样做)

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

答案 1 :(得分:0)

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