Mac-g++環境においてテンプレート関数内でIteratorを使う方法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ちぃ

Mac-g++環境においてテンプレート関数内でIteratorを使う方法

#1

投稿記事 by ちぃ » 12年前

初心者です。
下記のソースコードをコンパイルすると、下記make.logのようなエラーが出て失敗してしまいます。
func内のlist<T>をlist<int>などにするとエラーなくコンパイルできます。
どのように記述すればテンプレート関数内でIteratorが使えるようになるか、ご教授願えませんでしょうか?

■環境  
・Mac OS X 10.8.5(Mountain Lion)
・Xcode 5.0インストール環境でターミナルを用いてg++を使用

■make.log
make
g++ -c ../../../m.main/main.cpp -O -Dunix -D_MAC_OSX -DNDEBUG -UDEBUG -arch x86_64 -I../../../m.main
../../../m.main/main.cpp:6:6: error: expected ';' after expression
list<T>::iterator ite;
^
;
../../../m.main/main.cpp:6:20: error: use of undeclared identifier 'ite'
list<T>::iterator ite;
^
../../../m.main/main.cpp:6:11: error: unexpected type name 'iterator': expected expression
list<T>::iterator ite;
^
../../../m.main/main.cpp:9:2: note: in instantiation of function template specialization 'func<int>' requested here
func(1);

■ソースコード

コード:

#include <list>
#include <map>
using namespace std;
template <typename T> void func(T n)
{
	list<T>::iterator iter;
}
int main (int argc, char **argv) {
    func(1);
    return 0;
}

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: Mac-g++環境においてテンプレート関数内でIteratorを使う方法

#2

投稿記事 by h2so5 » 12年前

typenameを使いましょう

コード:

#include <list>
using namespace std;

template <typename T> void func(T n)
{
	typename list<T>::iterator iter;
}

int main (int argc, char **argv) {
	func(1);
	return 0;
}

ちぃ

Re: Mac-g++環境においてテンプレート関数内でIteratorを使う方法

#3

投稿記事 by ちぃ » 12年前

typenameを付けたところ、正常にコンパイルできるようになりました!
ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る