B_func();}}; class B {public:void B_func() {std::cout << "sml" << std::endl;}}; int main() {B* T1 = new B();A* T2 =new A();T2 ->_invalid use of incomplete type 'class ">
当前位置:   article > 正文

invalid use of incomplete type ‘class B‘_invalid use of incomplete type 'class b

invalid use of incomplete type 'class b

下列代码编译的时候会报错如标题

#include "iostream"
 
class B;
 
class A {
public:
void func(B* para) {
para -> B_func();
}
};
 
class B {
public:
void B_func() {
std::cout << "sml" << std::endl;
}
};
 
int main() {
B* T1 = new B();
A* T2 =new A();
T2 -> func(T1);
}
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

修改方法如下:

#include "iostream"

 

//classA中用到了classB的成员,所以classB要放到classA之前

class B {

public:

    void B_func() {

        std::cout << "sml" << std::endl;

    }

};

class A {

public:

    void func(B* para) {

        para -> B_func();

    }

};

int main() {

    B* T1 = new B();

    A* T2 =new A();

    T2 -> func(T1);

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

追问:

你说的对,但是现在我不想把B放到A之前。这个只是我举的例子,实际中的代码,A中有B,B中有A,所以在不调整A和B类的位置前提下 怎么解决上面的错误呀,谢谢你了!

追答:

因为classA的func函数使用了B的成员,所以必须在使用之前知道B的定义细节。
你可以把A的func延后实现(只在classA中定义func)。
具体代码如下:

class B;

class A {

public:

    void func(B* para);

};

class B {

public:

    void B_func() {

        std::cout << "sml" << std::endl;

    }

};

void A::func(B* para) {

    para -> B_func();

}

int main() {

    B* T1 = new B();

    A* T2 =new A();

    T2 -> func(T1);

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/121223
推荐阅读
相关标签
  

闽ICP备14008679号