读书人

一个类调用另一个类的函数出现“may b

发布时间: 2014-01-12 00:03:16 作者: rapoo

一个类调用另一个类的函数出现“may be undeclared or ambiguous.”
我的代码大体是
class A{
private:
B b;
public:
void fun(){
b.fun();
}
};
class B{
private:
public:
void fun(){}
};
接着出现这样的错误The text "b" is unexpected. "B" may be undeclared or ambiguous.
难道这样写不对吗?
求指导
[解决办法]


----------ATTENTION-------------------
class B;
--------------------------------------
class A{
private:
B b;
public:
void fun(){
b.fun();
}
};
class B{
private:
public:
void fun(){}
};

[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:


class B{
private:
public:
void fun(){}
};
class A{
private:
B b;
public:
void fun(){
b.fun();
}
};

B要先定义才能使用。当然如果只是声明,至少还能使用B的引用或指针。但你这里直接用到了B的对象和成员函数,前置声明都不够用了,必须整个定义放前面

那如果在B中调用A的函数,那时候又该怎么定义?


用指针或引用

class A;
class B{
private:
public:
void fun(A & data);
};
class A{
private:
B b;
public:
void fun(){
//b.fun();
}
};
void B::fun(A & data)
{
data.fun();
}


那个class A;这个是必须要写的吗?

必须滴,先申明后使用这是铁律,这个东西叫做前置声明,只有类的声明而无类的定义。
但是前置声明也有限制,你前置声明A后,只能使用A的引用或指针。

那10楼那样的,要怎么进行声明呢?


没可能,放弃吧,互相使用,你必须有一个是指针或引用,当然一般都是指针,引用做数据成员不太好

读书人网 >C++

热点推荐