3

重複の可能性:
奇妙な VC++ コンパイル エラー、C2244

テンプレート構造体とそのテンプレート メンバー関数を含む次の C++ コードがあります。テンプレート関数は、その宣言でテンプレート パラメーターを使用します。コードはコンパイルされません。

template<typename MyType>
struct Network
{
    template<typename MyOtherType>
    void Do_Stuff(char param[MyOtherType::size]);
};

template<typename MyType>
template<typename MyOtherType>
void Network<MyType>::Do_Stuff(char param[MyOtherType::size])
{
};

struct Array_Size
{
    static const int size;
};

const int Array_Size::size=3;

int main()
{
}

Visual Studio 2010 は次のエラーを生成します。

error C2244: 'Network<MyType>::Do_Stuff' : unable to match function definition to an existing declaration
    definition
    'void Network<MyType>::Do_Stuff(char [MyOtherType::size])'
    existing declarations
    'void Network<MyType>::Do_Stuff(char [MyOtherType::size])'

定義と宣言が同一であるにもかかわらず、コンパイラが一致を検出しない理由がわかりません。

4

0 に答える 0