gpt4 book ai didi

c++ - 智能感知警告 : Incomplete type is not allowed (in inline method but defintion of type is in cpp)

转载 作者:行者123 更新时间:2023-11-30 04:28:17 28 4
gpt4 key购买 nike

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

请问是否建议将内联方法移动到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文件里?为什么?

最佳答案

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

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

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

关于c++ - 智能感知警告 : Incomplete type is not allowed (in inline method but defintion of type is in cpp),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10268834/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com