gpt4 book ai didi

c++ - 转发声明一个继承自不同命名空间中的类的子类

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:20:17 25 4
gpt4 key购买 nike

我不明白为什么编译失败:

#include <SomeType.h> // has a namespace called SomeNamespace

class MyApplication;

int main(...)
{
...
MyApplication application;
...
}

class MyApplication : public SomeNamespace::SomeType {
...
};

目前我从 g++ (Ubuntu 4.4.3-4ubuntu5) 4.4.3 得到这个错误

../fix-protocol/main.cpp:44: error: aggregate ‘MyApplication application’ has incomplete type and cannot be defined

最佳答案

main 中,您正在实例化 MyApplication 类型的对象,它仍然是一个不完整的类型;你不能那样做,因为编译器对此一无所知(它需要知道例如它有多大,如果它有任何构造函数,...)。

要解决您的问题,您必须定义 MyApplication before 实例化该类型的对象。通常你将类定义放在一个单独的 header 中,它的名字将在任何需要它的文件中被#included。

相反,前向声明通常用于打破循环依赖和其他类似情况;他们所说的只是“有一个这样命名的类”,但是他们创建了一个不完整的类型,所以他们只能用于声明他们类型的变量,而不是定义他们。

关于c++ - 转发声明一个继承自不同命名空间中的类的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5047938/

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