私はこの問題を説明するが、この例を取る言い回しを少しわからないよ:コンパイラで、クラスで修飾されたメンバ関数定義の戻り値の型にclass修飾子が必要なのはなぜですか?
がfoo.h
namespace sample {
class Foo {
public:
enum Bar {
kValue1,
kValue2,
}
Bar SomeMethod(Bar some_value);
}
} // namespace sample
Foo.cc
namespace sample {
Bar Foo::SomeMethod(Bar some_value) { // compiler complains here
if (some_value == Bar::kValue1) {
return Bar::kValue2; // but not here
} else {
return Bar::kValue1;
}
}
} // namespace sample
コンパイラは次のように定義された戻り値のタイプについて文句を言う:
error: unknown type name 'Bar'
なぜそれがその資格Foo::SomeMethod
がBar
の戻り値の型に同じ資格を拡張しませんが、このメソッド定義でBar
のすべての他の用途への資格を延長んSomeMethod
の定義を与えますか? Bar
以来
短い答え - これは言語文法なので、 – SergeyA
「なぜその言語がどのように設計されているのか」以外に、これらの*なぜ*の質問に答えるのは難しいです。 –
@CaptainGiraffe「なぜこのような言葉ですか?」ではなく、「この2つの場所では構文が異なり、それ以外は何が違うのですか」という意味にしましたが、有効な点があります。 –