Solve Error: 'has incomplete type', foward declaration of 'class x'

简介:

在C++的OOB编程中,有时候我们会遇到这样的错误Error: 'has incomplete type',forward declaration of 'class x',那么是什么原因引起的这个问题呢,我们首先来看下面这段代码:

// Error: field '_a' has incomplete type 'A'
// forward declaration of 'class A'
class A;

class B {
public:
    B(A a): _a(a) {}
private:
    A _a;
};

class A {
public:
    A(B b): _b(b) {}
private:
    B _b;
};

在上面这段代码中,类A和类B互相含有对方作为自己的私有成员变量,那么不管谁写在前面,如果不事先声明另一个的话,都会报错找不到定义,那么我们事先声明A就没事了吗,也不是,像上面那样B中声明A的对象还是会出错,因为编译器不知道A的定义,无法生成类A的实例,所以会报错。一种改正方法是把对象实例变成对象指针,如下所示:

// Correct
class A;

class B {
public:
    B(A *a): _a(a) {}
private:
    A *_a;
};

class A {
public:
    A(B *b): _b(b) {}
private:
    B *_b;
};

本文转自博客园Grandyang的博客,原文链接: Solve Error: 'has incomplete type', foward declaration of 'class x',如需转载请自行联系原博主。

相关文章
leetcode-1044:最长重复子串(滚动哈希)
leetcode-1044:最长重复子串(滚动哈希)
235 0
|
存储 算法
halcon模板匹配实践(1)算子参数说明与算子简介
halcon模板匹配实践(1)算子参数说明与算子简介
1051 0
|
10月前
|
监控 Unix Linux
|
调度 C语言 芯片
FreeRTOS学习笔记—基础知识
本文简要介绍了什么是RTOS,介绍了前后台系统和RTOS的工作流程。此外,简单介绍了FreeRTOS的特点,相关概念和优点。最后,介绍了下载FreeRTOS的方法。
439 0
FreeRTOS学习笔记—基础知识
|
XML JSON 前端开发
老程序员分享:JSON数据格式
老程序员分享:JSON数据格式
214 0
无法写入用户设置。请打开用户设置并清除错误或警告,然后重试。
无法写入用户设置。请打开用户设置并清除错误或警告,然后重试。
|
存储 前端开发 安全
《Solidity 简易速速上手小册》第9章:DApp 开发与 Solidity 集成(2024 最新版)(上)
《Solidity 简易速速上手小册》第9章:DApp 开发与 Solidity 集成(2024 最新版)
211 0
搭建esp32-idf开发环境并烧入第一个程序
搭建esp32-idf开发环境并烧入第一个程序
640 0
计算机网络:物理层(奈氏准则和香农定理,含例题)
计算机网络:物理层(奈氏准则和香农定理,含例题)
622 0
|
测试技术 数据库 数据库管理
图书馆管理系统的设计与实现(论文+系统)_kaic
图书馆管理系统的设计与实现(论文+系统)_kaic