刚刚阅读有关朋友函数的信息,我正在尝试使用B类中的朋友函数“Print”访问A类中的私有变量“number”。我正在使用Visual Studio。编译我的代码给了我很多错误,如:
C2011:'A':'class'类型重新定义
C2653:'B':不是类或命名空间名称
请耐心等待我并展示实现目标的正确方法。
这是我的档案 A.H:
class A
{
public:
A(int a);
friend void B::Print(A &obj);
private:
int number;
};
A.cpp:
#include "A.h"
A::A(int a)
{
number=a;
}
B.h:
#include <iostream>
using namespace std;
#include "A.h"
class B
{
public:
B(void);
void Print(A &obj);
};
B.cpp:
#include "B.h"
B::B(void){}
void B::Print(A &obj)
{
cout<<obj.number<<endl;
}
main.cpp中:
#include <iostream>
#include <conio.h>
#include "B.h"
#include "A.h"
void main()
{
A a_object(10);
B b_object;
b_object.Print(A &obj);
_getch();
}
答案 0 :(得分:3)
......其次,您可能需要在B
标头文件中提及类A.h
的前向声明,以便将B
称为朋友:
#ifndef _A_H_
#define _A_H_
class B;
class A
{
friend class B;
};
#endif
<强>更新强>
我目前不太确定是否可以将成员函数声明为朋友,我会看看。
无法创建成员函数friend
声明,您可以将全局函数或整个类声明为朋友,另请参阅:C++ ref, Friendship and inheritance。
一般来说,使用friend
根本不是一个好的设计理念,因为它强烈地将这些类结合在一起。更好的解决方案是耦合接口(无论如何都不需要公开显示)
在极少数情况下,它可能是一个很好的设计决定,但几乎总是适用于内部细节。
答案 1 :(得分:1)
首先你需要把
#ifndef A_H
#define A_H
.... your A-class definition
#endif