2017-01-27 2 views
-2

でテンプレートコンパイルエラー私は私の質問を説明するために、次の例を与える:C++のlinux

class A 
{ 
    public: 
     template<typename T> 
     void fun(T &abc) 
     { 

     }; 

} 
template<typename U> 
void my_fun(std::vector<U> &obj) 
{ 
    int abc; 
    for(int i=0; i<obj.size(); i++ 
     obj[i].fun<int>(abc); 

} 

上記のコードは、Visual Studio 2010とウィンドウではなく、GCC4と、Linuxでコンパイルすることができます*。。 Linuxでは、以下のコンパイルエラーが発生します。

for  obj[i].fun<int>(abc);, expected ";"before "int" 

アイデアはありますか?

+1

'obj [i] .template fun (abc);'が必要です。 – songyuanyao

+0

または 'クラスA {...};' – UKMonkey

+0

'std :: vector'は宣言されていません。 – melpomene

答えて

1

あなたはクラス宣言の後にセミコロンが不足している、とあなたは方法の後にセミコロンを必要としません:

class A 
{ 
    public: 
     template<typename T> 
     void fun(T &abc) 
     { 

     } 
}; 

あなたは上記の問題を解決し、コンパイラは、まだ機能の解決の問題がある場合は、してみてください次の構文を使用します。

obj[i].template fun<int>(abc);