Kikuchy's Second Memory

技術のこととか、技術以外のこととか、思ったことを書き留めています。

"static"を付け間違えて、C++のクラスメソッド宣言と実装ではまった

C++でクラスメソッドを作る際、当然ながらstatic宣言子が必要になりますよね。
こんなコードを書いたらコンパイルエラーが出ました。

class SomeClass {
    public:
        static void someMethod();
};

static void SomeClass::someMethod()
{
    hogehoge();
}

出たコンパイルエラーは、

a storage class may not be specified here

いろいろ試したところ、どうやら実装のほうにはstaticキーワードは必要ないご様子。

class SomeClass {
    public:
        static void someMethod();
};

void SomeClass::someMethod()
{
    hogehoge();
}

これでコンパイル通りました。

うぬぬ、なぜ片方必要だったり必要なかったりするんだ……