首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >错误:成员访问类型不完整:的正向声明

错误:成员访问类型不完整:的正向声明
EN

Stack Overflow用户
提问于 2013-11-14 03:37:36
回答 2查看 119.7K关注 0票数 58

在同一个.cpp文件中有两个类:

代码语言:javascript
复制
// forward
class B;

class A {       
   void doSomething(B * b) {
      b->add();
   }
};

class B {
   void add() {
      ...
   }
};

转发不起作用,我不能编译。

我得到了这个错误:

代码语言:javascript
复制
error: member access into incomplete type 'B'
note: forward declaration of 'B'

我使用clang编译器(clang-500.2.79)。

我不想使用多个文件(.cpp和.hh),我只想在一个.cpp上编码。

我不能在A类之前写B类。

你知道如何解决我的问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-14 03:44:51

doSomething定义移到它的类声明之外,移到B之后,并通过public-ing it或friend-ing it使A可以访问它。

代码语言:javascript
复制
class B;

class A
{
    void doSomething(B * b);
};

class B
{
public:
    void add() {}
};

void A::doSomething(B * b)
{
    b->add();
}
票数 45
EN

Stack Overflow用户

发布于 2013-11-14 03:41:23

在使用类之前,您必须有类B的定义。否则编译器如何知道存在像B::add这样的函数

要么在类A之前定义类B,要么将A::doSomething的主体移到定义了类B之后,如

代码语言:javascript
复制
class B;

class A
{
    B* b;

    void doSomething();
};

class B
{
    A* a;

    void add() {}
};

void A::doSomething()
{
    b->add();
}
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19962812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档