2

我已经提前声明了我的枚举类,定义在 cpp 中,程序编译但我在类型名称下得到一个红色的“wave”(在 inline 方法下面)

我想问一下是否建议将该内联方法移动到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文件中吗?为什么?

4

1 回答 1

2

如果一个class方法(或任何函数)必须放在一个头文件中,该头文件将包含在几个 .cpp 文件中,那么它必须是inline.

inline并不一定意味着通常的宏样式内联。宏样式内联由编译器决定,程序员对其没有太多控制。
inline关键字是为所有 .cpp 文件仅生成一个定义的保证效果。inline 关键字有效地维护了ODR

AFAIK,通常必须inline在类中声明方法时(出于 ODR 目的)。因此,一旦您inline在类中创建方法,一切都应该可以正常工作而不会出现错误/警告。稍后将inline方法定义的关键字放在类之外是多余的。

于 2012-11-23T04:00:42.887 回答