提问人:TokaraForest 提问时间:6/24/2022 最后编辑:cigienTokaraForest 更新时间:6/25/2022 访问量:96
C++ 正向声明 - 不允许使用不完整的类型
C++ Forward Declaration - Incomplete type is not allowed
问:
我有多个类,并按顺序编写它们。First class 有一个枚举,但我想将其移动到所有其他类下面的类。这就是问题开始的地方。由于最后一个类将具有该枚举,因此在第一个类中使用枚举的成员会出错。
初始代码如下:
文件.hpp:
class A
{
public:
typedef enum
{
eOk = 0x00;
eError = 0x01;
}myEnum_et;
typedef myEnum_et(*callbackType)(B*);
callbackType myCallback;
public:
void foo1(callbackType callbackParam)
{
myCallback = callbackParam;
}
myEnum_et foo2()
{
return myCallback;
}
};
class B
{
public:
A::myEnum_et foo3(A *a)
{
if(a->foo2() == NULL) return A::eOk;
else return A::eError;
}
};
class C
{
public:
B *b;
void foo4(B *new_b)
{
b = new_b;
}
};
我想做的是:
class C;
class B;
typedef C::myEnum_et(*callbackType)(B*);
class A
{
public:
callbackType myCallback;
public:
void foo1(callbackType callbackParam)
{
myCallback = callbackParam;
}
myEnum_et foo2()
{
return myCallback;
}
};
class B
{
public:
C::myEnum_et foo3(A *a)
{
if(a->foo2() == NULL) return C::eOk;
else return C::eError;
}
};
class C
{
public:
typedef enum
{
eOk = 0x00;
eError = 0x01;
}myEnum_et;
B *b;
void foo4(B *new_b)
{
b = new_b;
}
};
如上所示,我只想将myEnum_et从 A 类移动到 C 类,并将函数指针移动到类 A 的范围之外。如您所知,在代码顶部声明 B 类对于将使用 myEnum_et 的人来说是不够的。我想原因是编译器需要 B 类的完整定义。这是错误:
#71 不允许输入不完整的类型。
我知道代码的可读性很丑陋。我只是想表明所有类的定义都相互依赖,并希望在此类顺序上使用正向声明(或其他解决方案)。顺便说一下,我使用C++03,所以我有点受限。
答: 暂无答案
评论