首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个类调用另一个类的函数出现“may be undeclared or ambiguous.”,该如何解决

2014-01-12 
一个类调用另一个类的函数出现“may be undeclared or ambiguous.”我的代码大体是class A{private:B bpubl

一个类调用另一个类的函数出现“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楼那样的,要怎么进行声明呢?


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

热点排行