質問編集履歴
1
内容の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
以下コードでコンパイラが嫌がる理由が分からないです
|
1
|
+
以下コードでコンパイラが~~嫌がる理由~~嫌がるようにした理由が分からないです
|
2
2
|
---
|
3
3
|
以下のようなコードを書いてコンパイルしたのですが、
|
4
4
|
protected within this context
|
@@ -8,7 +8,7 @@
|
|
8
8
|
Baseクラスは抽象クラスですし、
|
9
9
|
実際に使用される場合ExtendクラスのBaseポインタには派生クラスであるAクラスのポインタが格納されるのでfriendつけるのは派生先だけで十分であるように思います。
|
10
10
|
基本クラスがまだ普通のクラスならばコンパイラが怒るのも納得できるのですが、
|
11
|
-
抽象クラスだったら継承クラスすべてでfriend宣言されていれば、別に怒る必要はないと思うのですが、コンパイラは何がそんなにいやなんでしょうか?
|
11
|
+
抽象クラスだったら継承クラスすべてでfriend宣言されていれば、別に怒る必要はないと思うのですが、コンパイラは何がそんなにいやなんでしょうか?(多分昔のc++コンパイラなら許してるのでは?)
|
12
12
|
|
13
13
|
```ここに言語を入力
|
14
14
|
#include <iostream>
|
@@ -16,7 +16,7 @@
|
|
16
16
|
using namespace std;
|
17
17
|
|
18
18
|
class Base {
|
19
|
-
//friend class Extend;
|
19
|
+
//friend class Extend; //コメントアウト切ったらエラーは消える
|
20
20
|
protected : virtual int print() const = 0;
|
21
21
|
protected : virtual ~Base() {}
|
22
22
|
};
|
@@ -29,7 +29,7 @@
|
|
29
29
|
};
|
30
30
|
class Extend {
|
31
31
|
public : Extend(int);
|
32
|
-
public : ~Extend() { delete p; };
|
32
|
+
public : ~Extend() { delete p; }; //deleteしたいがprotectecなので怒る
|
33
33
|
private :
|
34
34
|
Base* p;
|
35
35
|
};
|