[英]Using friend function in C++
剛剛閱讀了有關朋友函數的信息,我試圖通過類B的朋友函數“ Print”訪問類A中的私有變量“ number”。我正在使用Visual Studio。 我的代碼編譯給了我很多各種各樣的錯誤,例如:
C2011:“ A”:“ class”類型的重新定義
C2653:“ B”:不是類或名稱空間名稱
請讓我耐心,並為實現目標提供正確的方法。
這是我的文件啊:
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;
}
BH:
#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();
}
...第二,您可能需要在Ah
頭文件中對類B
進行前向聲明,以將B
稱為朋友:
#ifndef _A_H_
#define _A_H_
class B;
class A
{
friend class B;
};
#endif
UPDATE
我目前不太確定是否可以將成員函數聲明為朋友,我來看一下。
無法創建成員函數friend
聲明,可以將全局函數聲明為整個函數,也可以將整個類聲明為friend,另請參見: C ++ ref,Friendship和Inheritance 。
通常,根本不使用friend
並不是一個好設計主意,因為它將多個類緊密耦合在一起。 更好的解決方案是耦合接口(無論如何都不需要公開顯示)。
在極少數情況下,這可能是一個不錯的設計決策,但這幾乎總是適用於內部細節。
首先你需要放
#ifndef A_H
#define A_H
.... your A-class definition
#endif
在您的Ah中和在Bh中相似,因此可以防止同一文件的多個包含(這是您的重復定義錯誤)...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.