人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【c++ のソースがコンパイルできません ><】

STL の next_permutation を呼び出すだけの、簡単なソースのつもりなんですが、ideone の gcc-4.3.4 だとコンパイルエラーになってします。
http://ideone.com/BFoZ2

手持ちの環境で、mingw32 と、Solaris10 に付いてくる gcc ではコンパイルできて、実行もできます。
何が悪いのか、教えてください。

コンパイル可能な gcc のバージョンは以下の通りです。

■mingw32
d>gcc --version
2.95.2

■gcc @Solaris10
% gcc --version
gcc (GCC) 3.4.3 (csl-sol210-3_4-branch+sol_rpath)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

# ネタとか、クイズじゃなくて、本当に何が悪いのか分かりません


●質問者: a-kuma3
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● cx20
●200ポイント ベストアンサー

自分も良く分かってないのですが「typename」を入れるとコンパイルが通るようです。

typename vector<T>::const_iterator i = v.begin();

http://ideone.com/lvBDZ

ちなみに、以下の環境でも、ideone と同様のエラーになるようでした。

VC++ はコンパイルできました。

<参考情報>
■ テンプレートの中でほかのテンプレートクラスのメンバ型を使う方法: typename や template の別の用法について - akihiko’s tech note
http://d.hatena.ne.jp/aki-yam/20100612/1276357023


a-kuma3さんのコメント
おー。 >> よく読めば,typename を使えばいいと分かる. prog.cpp:8: note: say ‘typename std::vector::const_iterator’ if a type is meant << た、確かに。 何ですか、この typename って。初めて見ました。 gcc 拡張? それとも、ちゃんとした予約語?

cx20さんのコメント
STL は勉強不足で、よく分かってないのですが、typename を付けるのが正しいっぽいです。VC++ だと typename 付けなくても型を解析してくれるようですけど。 >> ■ テンプレートあれこれ (4) -- typename の役割 http://www.fides.dti.ne.jp/~oka-t/cpplab-template-4.html << ちなみに、Cygwin / g++ だと以下のメッセージでした。 >> test.cpp:8:9: error: need ‘typename’ before ‘std::vector<T>::const_iterator’ because ‘std::vector<T>’ is a dependent scope <<
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ