ページ 11

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

Posted: 2013年11月09日(土) 21:40
by ちぃ
初心者です。
下記のソースコードをコンパイルすると、下記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;
}

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

Posted: 2013年11月09日(土) 21:50
by h2so5
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を使う方法

Posted: 2013年11月11日(月) 09:18
by ちぃ
typenameを付けたところ、正常にコンパイルできるようになりました!
ありがとうございました。