2011-02-02 20 views
3

g ++でコンパイルするときに 'int'の前に予期したprimary-expressionが発生しました。あなたはそれを修正する理由と方法を知っていますか?ありがとうございました !C++で期待されるプライマリ式のエラー

struct A 
{ 
    template <typename T> 
    T bar() { T t; return t;} 
}; 

struct B : A 
{ 
}; 

template <typename T> 
void foo(T & t) 
{ 
    t.bar<int>(); 
} 

int main() 
{ 
    B b; 
    foo(b); 
} 
+0

これはエラーを出力するのはt.bar 行ですか? – reese

答えて

14

foo()機能をコンパイルする場合、コンパイラはそのバーを知らないがメンバーテンプレートです。

template <typename T> 
void foo(T & t) 
{ 
    t. template bar<int>(); // I hope I put template in the right position 
} 

コンパイラは、バーはメンバー変数であり、それを何かと比較しようとしていると考えます。 t.bar < 10。その結果、 "int"は式ではないと不平を言う。

+0

+1:私はそれを知りませんでした。 –

+1

はい、正しい位置 - それはコンパイルします。 – tauran

+0

@Murilo私はほとんどのC++プログラマがそれを知らないと思います。私はそれが存在することを知っていますが、私は 'テンプレート'がどこに行かなければならないのかも分かりません(しかし、 't.bar template 'は私にはさらに奇妙に見えます。 – Sjoerd

関連する問題