g++报错 [Error] 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);
}


推荐于2016-09-07

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

#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);

}

追问

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

追答

因为classA的func函数使用了B的成员,所以必须在使用之前知道B的定义细节。

你可以把A的func延后实现(只在classA中定义func)。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

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);

}

 

你可能感兴趣的:(C/C++综合,Linux基础,error:,invalid,use,of,incomple)