2008-02-16

C++で分からない事があるので丸投げ 賢い増田教えてくれえ

VC++2005使ってます。

構造体内に構造体を持たせて、その構造体が親の構造体を継承するコードを書いたんだけど

template<typename T> struct foo{
	typedef T type;
	template<typename T_> struct bar : foo<T_>{};
};

int main(){
	foo<int>;
	{ foo<int>::type a; } // 変数を定義すれば良いのかよ!?
	foo<int>::type; // error C2059: 構文エラー : '空の宣言'

	foo<int>::bar<short>;
	{ foo<int>::bar<short>::type a; }
	foo<int>::bar<short>::type; // error C2059: 構文エラー : '空の宣言'

	// error C2039: 'bar<long>' : 'foo<T>::bar<T_>' のメンバではありません。
	foo<int>::bar<short>::bar<long>;

	return 0;
}

何故か先の二例では空の宣言というコンパイルエラーで蹴られるし、最後の例に至っては継承を使って本来の目的である“入れ子構造体を必要であれば事実上無限に定義する”をしようとしているのに、これがまるでできないかの如くエラー

どういうことなんだよおおおおお 後、前は増田にcppコード書くと何故か文字化けしたんだけど、今は直ってる!中の人ありがとうGJ

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん