0
나는 다음과 같은 코드가 있습니다기본 클래스에서 파생 클래스 함수를 친구로 만들려면 어떻게해야합니까?
#include <iostream>
class A {
private:
int a;
public:
void setA(int a_);
friend int B::getA();
};
class B : public A {
public:
int getA();
};
void A::setA(int a_) {
a = a_;
}
int B::getA() {
return a;
}
int main() {
B myB;
myB.setA(9);
std::cout << myB.getA()<< std::endl;
return 0;
}
가 g로 컴파일 ++ 수율 : 컴파일러는 클래스를 통해 정의를 갈 때
friend.cpp:10:16: error: use of undeclared identifier 'B'
friend int B::getA();
내 생각은, 아직 클래스 B에 대해 알고하지 않는 것이 . 따라서,이 문제를 돌봐 B를 선언 전달할 수 있습니다 :
#include <iostream>
class B;
class A {
...
을 꽤 작업을 수행한다 :
friend.cpp:10:16: error: incomplete type 'B' named in nested name specifier
friend int B::getA();
컴파일러가 주어진대로 함수를 해석 할 수없는 것처럼 보입니다.
어떻게 파생 클래스 함수를 기본 클래스의 친구로 만들 수 있습니까?
이 때문에 C++에 'protected'가 있습니다. – rici
오른쪽. 나는 보호받을 수있다. 나는 내가이 고의적 인 방식으로 컴파일되도록 할 수 있는지 궁금해했다. – user2079802
친구 선언에서 B의 정의가 필요하고, B가 A의 정의를 상속해야한다. 나는이 패러독스에 대한 해결책을 볼 수 없다. –