2015-11-13 117 views
-1

我想做“func”类作为“节点”类的朋友。但不幸的是,func类中的函数无法访问节点类的私有成员。例如,在函数“expand”中,我收到一个错误,指出n是未定义的。因为我是编程新手,你会告诉我什么是问题吗?朋友类无法识别

#include<iostream> 
using namespace std; 
#define max 9 //we use a const 

class node 
{ 
private: 
    int n[max]; 
    friend class func; 
}; 

class func 
{ 
public: 
    bool isgoal(int); 
    bool isvalid(int); 
    void expand(); 
}; 

扩大功能:

void func::expand() 
{ 
    for(int i=0;i<=8;i++) 
    { 
     n[i]=0; 
    } 
} 

的另一个问题是,当我想使类“节点”的副本,以阵列的成员n为进其与此代码复制:

void func::expand() 
    { 
     node b=n; 
} 

它说,“构造不能转换为int [9]到节点

我怎么能复制我在这个程序中将n个人变成临时数组?

+0

'void node :: expand'类'node'没有名为'expand'的成员 –

+0

'n'是'node'的非静态数据成员。你需要一个'node'的实例来访问这个成员。 –

+0

但我已经在类节点中定义了它,并且由于节点和func是朋友,所以展开应该访问它。 –

回答

0

但遗憾的是在FUNC类函数不能访问节点类

朋友类FUNC的私人 成员可以确实能够访问节点的实例的私有成员。但是你的func方法没有提供他们可能访问哪个节点实例的信息。

您可以更改

bool isgoal(int); 

bool isgoal(int, node*); 

bool isgoal(int, node&); 

,或者提供一个节点*实例作为类FUNC,必须初始化的一部分。

+0

换句话说,假设您有500个节点实例和5个func实例。你的代码需要通知编译器哪个节点实例可以被哪个特定的func实例访问。 –