Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Intellisense警告:不允许使用不完整的类型(在内联方法中,但类型的定义在cpp中)_C++ - Fatal编程技术网

C++ Intellisense警告:不允许使用不完整的类型(在内联方法中,但类型的定义在cpp中)

C++ Intellisense警告:不允许使用不完整的类型(在内联方法中,但类型的定义在cpp中),c++,C++,我已经向前声明了我的枚举类,定义在cpp中,程序可以编译,但是在类型名下我得到了一个红色的“波浪”(在内联方法下面) 我想问一下,是否建议将该内联方法移动到cpp文件中? 我是一个hoby程序员,所以我不知道头文件中这个类型不完整的内联方法是否正确 头文件: #include <map> using std::map; enum class MinimumName; class Limits { public: Limits(TableLa

我已经向前声明了我的枚举类,定义在cpp中,程序可以编译,但是在类型名下我得到了一个红色的“波浪”(在内联方法下面)

我想问一下,是否建议将该内联方法移动到cpp文件中? 我是一个hoby程序员,所以我不知道头文件中这个类型不完整的内联方法是否正确

头文件:

#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
};