2011-02-02 75 views
3

當使用g ++編譯下面的代碼時,我在'int''錯誤之前得到'期望的主表達式'。你知道爲什麼以及如何解決它嗎?謝謝 !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 2011-02-02 19:59:25

回答

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:我不知道。 – 2011-02-02 20:04:16

相關問題