当前位置: 首页 > 知识库问答 >
问题:

错误:无效使用不完整类型与前置声明

宫修贤
2023-03-14

我试图整理一系列的意大利面条代码从Arduino项目处理wifi, mqtt和SPIFF存储配置和我发现的最简单的解决方案是有一个基类,其中包含指向子类的指针,每个子类都有指向父类的指针类,并在需要时可以调用基类及其指向对象的指针。

在这个SSCCE中,我有两个类A和B,其中B包含在A中,需要时可以访问A的方法。

a.h
#include<stdio.h>

class B;

class A
{
    public:
        A();
        B* b;
        void readConf();
};
a.c
#include "a.h"

A::A()
{
}

void A::readConf()
{
    //readconf
}
b.h
#include<stdio.h>

class A;

class B
{
    private:
        A* parent;
    public:
        B(A*);
        void fun();
};
b.c
#include "b.h"

B::B(A* a):
parent(a)
{
};

void B::fun()
{
    parent->readConf(); // this call to the parent method raises the error
}
test.c
#include "a.h"
#include "b.h"

int main()
{
    A a = A();
    return 0;
}

尽管我有一个:

gcc-c a. c-o a. o
gcc-c b. c-o b. o b. c:在成员函数'无效B::fun()': b. c: 11:8:错误:无效使用不完整类型'类A'11|父-

阅读其他线程时,我意识到a的正向声明是不够的,因为类B需要知道a的完整定义才能调用其方法之一,但是在a.h和B.h中包含头文件会创建循环依赖,如何在不牺牲基类设计的情况下实现上述功能,该基类包含指向其他类的指针,这些类可以通过指向基类的指针调用父类及其对象方法?

共有1个答案

危砚
2023-03-14

b.c(应该是.cpp,IMHO)需要知道a的完整定义,以便通过指针取消对其的引用。没有这些信息,它就不知道如何找到你希望在那个地址找到的东西。

因此,你需要#包括“a. h”来从内部获得这个定义b.cpp.

 类似资料:
  • 问题内容: 我正在学习使用课程,而我的作业的一部分是参加汽车课。我在第6行遇到错误,尝试在该行中打印方法的结果。我认为这意味着我正在尝试打印不存在的内容,并且我怀疑这是里程方法。我尝试将其更改为返回英里,但这也没有用。有任何想法吗? 问题答案: 该错误消息告诉您确切的问题是什么-您正试图从不返回结果的方法中提取结果。 而是让方法 返回 字符串,而不是打印出字符串。 我本人将使它成为一种吸气剂方法,

  • 问题内容: 我们现在正在学习如何使用多个类,并且有一个项目要求创建一个包含a 和a的类,然后从主类中引用它以找到直径。此代码继续收到错误(标题中提到) 感谢您的帮助,-AJ 更新1 :好的,但是我不必将第三行声明为double,对吗?在我正在学习的书中,该示例没有做到这一点。 如您所见,该代码与我在我的代码中有什么不同?无论出于什么原因,本书的代码中都没有错误,但是我的说法是那里有错误。 问题答案

  • 首先是一些背景。正如C 17标准所述: [vector.overview]/3如果分配器满足分配器完整性要求17.6,则在实例化vector时可使用不完整类型T。3.5.1.T应在引用向量的任何结果特化成员之前完成。 我在本回购协议中尝试了3种方案(代码复制在底部): 包含不完整向量类型的类在同一头文件中声明(默认ctor/dtor)并定义 编译用b. h包括: 编译用b. h包括: 我的问题是,

  • 问题内容: 我有一个使用JDOM和xpath解析XML文件的过程,如下所示: 以上工作正常。xpath表达式存储在属性文件中,因此可以随时更改它们。现在,我必须处理更多来自旧系统的xml文件,该旧系统将仅以4000字节的块发送xml文件。现有处理读取4000字节的块并将其存储在Oracle数据库中,每个块作为数据库中的一行(对遗留系统进行任何更改或将这些块存储为数据库中的行的处理都是不可能的) 。

  • 我正在尝试编译我正在编写的Java Web应用程序,并且我遇到了编译错误,我不知道该怎么办。从我完成的谷歌搜索中,我发现了这个SO问题,但是提问者使用的是EJB,而我的错误是在JPA实体类中。 下面是maven构建错误。 这是我的用户类文件。 我查看了javax.persistence.Index JavaDoc,我的声明是正确的,所以我在这里被难住了,有人知道我做错了什么吗?感谢您的时间和考虑。