0
私は次のコードを持っている:G ++収率でコンパイル基本クラスの派生クラス関数をどのように友人にすることができますか?
#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;
}
を:
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の定義が継承される必要があります。私はこのパラドックスのための解決策を見ることができません。 –