Dav*_*log 2 c++ linker-errors header-files multiple-definition-error
我知道......以某种方式的基础知识,但我不明白。我读到我可以将我的函数定义放在我的头文件中,然后包含它。到目前为止我从未这样做过,因为我喜欢我在 .cpp 文件中的定义与它在头文件中的声明分开。
现在我只有两个函数,我不想要这些定义的额外文件。
头文件.h
const QString reviewToString(const int); //Declaration - do I even need it now?
const QString statusToString(const int); //Declaration - do I even need it now?
const QString reviewToString(const int r) //Definition
{
switch(r)
{
case 0:
return "Excellent";
case 1:
return "Great";
case 2:
return "Okay";
case 3:
return "Poor";
case 4:
return "Terrible";
default:
return "Unknown";
}
}
const QString statusToString(const int s) //Definition
{
switch(s)
{
case 0:
return "Watched";
case 1:
return "Bought";
default:
return "Not Watched";
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的头文件的摘录。我有一些其他的enums 和structs 但它们对这些函数并不重要,因为它们只是将整数转换为将显示在其他地方的 QString 。我也有一个包含守卫。
现在我收到了很多这样的错误:
`reviewToString(int)' 的多重定义
这是为什么?为什么我不能在这个标题中声明和/或定义它们?
您需要添加inline到定义中。没有它,每个翻译单元将创建自己的副本,链接器将不知道那些副本应该是重复的,并且他被允许扔掉除了一个副本之外的所有副本。
更好的是,不要将定义添加到标题中,只需声明就足够了。将实现移动到它自己的翻译单元 ( .cpp-file)。您不需要inline那里,它有多种好处,随着您的项目的发展,这些好处变得越来越重要。