我已经向前声明了我的枚举类,定义是在cpp中,程序编译但是我在类型名称下面得到一个红色的“wave”(在内联方法下面)
我想问一下是否建议将内联方法移动到cpp文件中? 我是一个笨拙的程序员,所以我不知道这个内联方法是否在头文件中具有不完整类型是否正常。
头文件:
#include <map>
using std::map;
enum class MinimumName;
class Limits
{
public:
Limits(TableLayout layout);
void SetMinimum(MinimumName name, unsigned int minimum);
// other stuff irrelevant
private:
typedef map<MinimumName, unsigned int> MinContainer;
MinContainer::iterator Miniter;
MinContainer Minimums;
};
//intelisence warning here in argument list
inline void Limits::SetMinimum(MinimumName name, unsigned int minimum)
{ // incomplete type is not allowed
Miniter = Minimums.find(name);
Miniter->second = minimum;
}
cpp文件
enum class MinimumName
{
Inside,
Outside,
Table
};
我应该将它移动到cpp文件中吗?为什么?
答案 0 :(得分:2)
如果必须将class
方法(或任何函数)放入一个头文件中,该文件将被几个.cpp文件包含,那么它必须是inline
。< / p>
此inline
并不一定意味着通常的宏样式内联。宏样式内联由编译器决定,程序员对它没有多少控制权
此inline
关键字是保证的效果,其中只为所有.cpp文件生成一个定义。有效地,inline
关键字维护ODR。
AFAIK,通常当在类中声明它时,必须使inline
(用于ODR目的)方法。所以一旦你在类中创建方法inline
,一切都应该正常工作,没有错误/警告。稍后将inline
关键字放在类外的方法定义是多余的。