C ++メソッド名はヘッダに、クラス名で修飾することはできますか?

StackOverflow https://stackoverflow.com/questions/688802

質問

素朴な疑問は、この有効なC ++です。

class Foo
{
    void Foo::doSomething();
};

質問のポイント:?であるメソッド名の前にクラス名とダブルコロンを繰り返し使用する有効なの内部クラスの宣言

私は、この使用して、G ++ 4.2.3を行うコードをコンパイルの問題を抱えています。私は中掘り、コードを変更する前に、ここでは、構文を記述したものへの参照を見てみたいです。またはコンパイラをダウングレード。これは、G ++ 3.3.6でビルドします。

私は取得していますエラーがある(およそ):

Foo.h:3: error: extra qualification ‘Foo::’ on member ‘doSomething’

私はグーグルをしましたが、何かを思い付くことができませんでした。私は、標準を持っていない、と私はやっていても、それはおそらく正式な何かを見つけるために私にかなり時間がかかるだろう。私はC ++言語の弁護士だありません。

役に立ちましたか?

解決

私は標準を見ていた、9.2節では、関連する部分になります。私はBNFとその素晴らしいではありませんが、私は、これは許可されたことを示すだろうクラスのメンバーのためのBNFには何も表示されませんでした。識別子がさえBNFに「修飾されていない-ID」と命名されます。

G ++は、バージョン4.1での動作を変更して、明らかに他のコンパイラの多くはこれを受け入れたが、私はこのスタイルが使用され、誰もがそれを行うだろう、なぜ私は見当がつかない見たことがありません。それはコンパイラのかなり多種多様なエラーを誘発しないように見えるので、私の知る限り、それは確かに有効ではありません言うことができるようにそこにこのスタイルのためのいくつかの歴史的な理由かもしれませんが、ます。

私はグーグルで見つけた唯一の良いリファレンスは、このページましたこれはちょうどG ++ 4.1での変更点のいくつかを説明しようとします。

他のヒント

ダンと同じように、私は決定的な結果なしで標準を見ました。私はあなたのコードを試してみました(世界で最も標準に準拠し見なさ)となったコモのオンラインコンパイラする

  

3行目:エラー:修飾名ではありません   メンバ宣言では許可されます。

あなたはこれをさらに取ることに興味がある場合は、

、私は<のhref =「http://groups.google.com/group/comp.lang.c++.moderated/topics?pli=1」に質問を投稿することをお勧めrel = "nofollowをnoreferrer"> comp.lang.c ++。多くのC ++言語の弁護士がここにあるよりも、そこにあるとして、のニュースグループをモデレートます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top