我的代码中有这样的内容:
namespace A {
namespace B {
void
GetLine(std::istream& stream, std::string& line)
{
line.clear();
while (stream.good()) {
std::getline(stream, line);
boost::trim(line);
if (not line.empty()) break;
}
boost::to_upper(line);
}
}
}
每当我拨打A::B::GetLine
时,我都会收到多个定义错误。任何想法为什么?
(代码正在运行,因此如果您需要更多信息,我会尝试提供特定的代码段,但我不能只是在这里填写整个代码。)
答案 0 :(得分:4)
您几乎肯定会将代码包含在多个标头中,而不是在标头中声明并在源文件中定义。您需要声明函数内联,模板化,或将定义移动到源文件中,但将声明留在标题中。
答案 1 :(得分:1)
您的问题是您可能在.h文件中包含此代码并将其包含在更多.cpp文件中。解决方案是使用inline关键字使编译器内联并删除引用:
namespace A {
namespace B {
inline void
GetLine(std::istream& stream, std::string& line)
{
line.clear();
while (stream.good()) {
std::getline(stream, line);
boost::trim(line);
if (not line.empty()) break;
}
boost::to_upper(line);
}
}
}
另一种解决方案是将方法体移动到.cpp文件。