Nehmen wir IWie man Nichtmitgliedfunktion von einem Dateifreund mit Klasse in anderer Akte macht?
// Xh (erste Datei)
#include <iostream>
class X{
int x;
public:
X(int i);
void print_me();
};
// X.cpp (zweite Datei)
#include "X.h"
X::X(int i){x = i}
void X::print_me(){std::cout<< x << endl;}
// main.cpp (dritte Datei eine Datei haben,
)#include "X.h"
void swap(int lhs, int rhs){
// do the swap
}
class Y{
X x_obj;
public:
friend void swap(Y& lhs, Y& rhs){
swap(lhs.x_obj.x, rhs.x_obj.x);
}
};
int main(){return 0;}
Meine Frage ist: Wie kann ich Klasse Y in main.c machen pp ein Freund von X?
Ich dachte daran, Klasse Y in .h und .cpp-Datei zu brechen und Y.h-Datei in X.h und gehen von dort. Gibt es einen anderen Weg als das? Ich meine im aktuellen Zustand des Codes Y einen Freund von X zu machen:
Der Fehler Ich bin in aktuellem Zustand erhalten ist:
> In file included from main.cpp:1:0: X.h: In function 'void swap(Y&,
> Y&)': X.h:3:9: error: 'int X::x' is private
> int x;
> ^main.cpp:12:24: error: within this context
> swap(lhs.x_obj.x, rhs.x_obj.x);
> ^In file included from main.cpp:1:0: X.h:3:9: error: 'int X::x' is private
> int x;
> ^main.cpp:12:37: error: within this context
> swap(lhs.x_obj.x, rhs.x_obj.x);
Jetzt habe ich neues Problem von nicht Mitglied Funktion void tauschen (Y & Lhs, Y & RHS) Zugriff auf private Mitglied von Y, die X X_obj seit dieser Funktion versucht, auf das private Mitglied von Y zuzugreifen. – solti
@solti Sie haben es erklärt als der Freund der Klasse 'Y', nicht wahr? – songyuanyao
yup .. aus irgendeinem Grunde dachte ich erkläre Freund mehrmals erstellen Problem .. aber anscheinend nicht wahr .. nach Freund Leeren swap (Y platzieren & lhs, Y & rhs); in Y wie ich hatte früher es funktioniert – solti