我知道...有些基础,但我不明白。我读到我可以将我的函数定义放在我的标题中然后包含它。到目前为止,我从未这样做过,因为我喜欢在 .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";
}
}
这是我的头文件的摘录。我得到了一些其他的 enum
和 struct
但它们对于这些函数来说并不那么重要,因为它们只是将整数转换为 QString 并将显示在其他地方。我也有一个包含守卫。
现在我遇到了很多这样的错误:
multiple definition of `reviewToString(int)'
这是为什么呢?为什么我不能在此 header 中声明和/或定义它们?
最佳答案
您需要在定义中添加inline
。没有它,每个翻译单元都会创建自己的拷贝,链接器将不知道那些应该是重复的,并且他可以丢弃除了其中一个拷贝之外的所有拷贝。
更好的是,不要将定义添加到标题中,只需声明就足够了。将实现移动到它自己的翻译单元(.cpp
-文件)。您在那里不需要 inline
,它有多种好处,随着您的项目的发展,这些好处变得越来越重要。
关于c++ - 多重定义 - 为什么我不能在标题中定义它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18806197/