C++ Intellisense警告:不允许使用不完整的类型(在内联方法中,但类型的定义在cpp中)
我已经向前声明了我的枚举类,定义在cpp中,程序可以编译,但是在类型名下我得到了一个红色的“波浪”(在内联方法下面) 我想问一下,是否建议将该内联方法移动到cpp文件中? 我是一个hoby程序员,所以我不知道头文件中这个类型不完整的内联方法是否正确 头文件:C++ Intellisense警告:不允许使用不完整的类型(在内联方法中,但类型的定义在cpp中),c++,C++,我已经向前声明了我的枚举类,定义在cpp中,程序可以编译,但是在类型名下我得到了一个红色的“波浪”(在内联方法下面) 我想问一下,是否建议将该内联方法移动到cpp文件中? 我是一个hoby程序员,所以我不知道头文件中这个类型不完整的内联方法是否正确 头文件: #include <map> using std::map; enum class MinimumName; class Limits { public: Limits(TableLa
#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文件中?为什么?如果一个
类
方法(或任何函数)必须放在一个头文件中,该头文件将由几个.cpp文件包含,那么它必须是内联的
这inline
并不一定意味着通常的宏样式内联。宏样式的内联由编译器决定,程序员对它没有太多控制权。
此inline
关键字是保证的效果,其中仅为所有.cpp文件生成一个定义。有效地,inline
关键字维护
好的,传统上,当方法在类中声明时,必须使其成为内联的
(出于ODR目的)。因此,一旦您在类中创建了inline
方法,一切都会正常工作,不会出现错误/警告。稍后,将方法定义的内联
关键字放在类外是多余的。最好在方法声明之前将内联
关键字放在类内。如果我用您没有提供的类型注释掉行,并且只包含main文件的头,GCC不会抱怨。@iammilind谢谢,将inline关键字放在类中会自动删除一个警告:D(但我不确定这是否是临时性的)。。。chris,感谢您的测试,因此visual studio给出了错误的IntelliSense警告,好吧……IntelliSense解析器与尝试使用此内联函数的任何其他.cpp文件存在相同的问题。它没有枚举的定义。因此,它永远无法实际使用该函数。要么将枚举移到头文件中,要么将函数移到.cpp文件中。@iammilind将您的评论放入答案中是值得的,它也有助于OP等,还有其他想要查找未回答问题的人。我看这个问题已经有答案了。
enum class MinimumName
{
Inside,
Outside,
Table
};