[英]Where are the MatrixXd and VectorXd define in Eigen(c++)? I can't find the definition of them through the grep command
[英]Multiple Definition - Why can't I define them in a header
我知道...基本知识,但是我不明白。 我读到可以将函数定义放在标头中,然后将其包括在内。 到目前为止,我还没有做过这件事,因为我喜欢在.cpp文件中的定义与在头文件中的声明分开的定义。
现在,我只有两个功能,不需要这些定义的额外文件。
Header.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并将在其他地方显示。 我也有一个包括后卫。
现在我收到了很多这样的错误:
reviewToString(int)的多重定义
这是为什么? 为什么我不能在此标头中声明和/或定义它们?
您需要向定义添加inline
。 没有它,每个翻译单元将创建自己的副本,链接器将不知道这些副本应该是重复的,并且不允许他丢弃其中一个副本。
更好的是,不要将定义添加到标头中,只需声明即可。 将实现移至其自己的转换单元( .cpp
-file)。 您不需要那里的inline
,它具有多重好处,随着项目的发展,它的重要性越来越重要。
这里的问题是一个定义规则 。 (C ++标准§3.2 )
基本上,整个程序中不能对一个函数有多个定义。 但是,您可以使函数inline
(否则,必须将它们放在.cpp
文件中)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.