6
4

2 に答える 2

1
template< typename P > // P is declared here
struct operations  {
    ... // into this scope
}; // but it goes out of scope here

template< typename P > // So it needs to be redeclared
void operations::display( Rectangle const &, std::ostream &) {
    ... // for this scope.
}

関数displayは、そのパラメーターの名前を「所有」していません。テンプレート パラメータは、定義で再宣言する必要があります。コンパイラ メッセージは、大括弧内にtemplate<>何かを配置することを提案する構文を参照しています<>が、紛らわしいことに、大括弧を空のままにし、文字通り別のことtemplate<>を意味します — 明示的な特殊化は、ここで必要なものではありません。

一方、定義で言及されていないstaticメンバー関数のプロパティです。コンパイラは、定義シグネチャの他の部分を使用してそれを宣言シグネチャに一致させた後に記憶します。したがって、定義から消去する必要があります。staticstatic

于 2013-05-11T03:43:16.197 に答える