プログラマーが正しいコードを書くのに役立つテンプレート クラスを作成しようとしています。サンフランシスコからワシントンへのルートと、ワシントンからニューヨークへのルートを考慮して、サンフランシスコからワシントンを経由してニューヨークへのルートを計算します。サンフランシスコからロサンゼルス、ワシントンからニューヨークへのルートを指定すると、コンパイラはエラーを報告します。
これがクラスです(通常の主力機能なし):
extern const char miami[] = "Miami";
template< const char* FINISH, const char* START>
class Route {
public:
Route();
~Route() {};
template<const char* OTHERPLACE>
Route<START, OTHERPLACE> alterFinish() const;
};
template<const char* START> // specialisation
template<const char* OTHERPLACE>
// Allow only miami as FINISH to be changed to something else.
Route<START, OTHERPLACE> Route<START, miami>::alterFinish() const{
return Route<START, OTHERPLACE>();
}
残念ながら、これは機能しません。「不完全な型の無効な使用」エラーが発生します。特殊化されていない同じ種類の関数はコンパイルされます。私は何を間違っていますか?