2014-09-19 81 views
0
struct Message1 { 
    int a; 
    int b; 
}; 
template<class MSG_T> void RegisterMessageType() { 
    MSG_T t; 
} 

Message1 m; 
RegisterMessageType<Message1>(); 

錯誤消息:如何調用此函數模板?

error C2909: 'RegisterMessageType': explicit instantiation of function template 
      requires return type 

error C4430: missing type specifier - int assumed. 
       Note: C++ does not support default-int 

error C2768: 'RegisterMessageType' : illegal use of explicit template arguments 

有什麼不對?謝謝。

對不起,再次編輯。

,如果我把

Message1 m; 
RegisterMessageType<Message1>(); 

成主要功能,它(VS2010)可以對其進行編譯好了。但是如果我把它放在main之外,就會發生上面的編譯錯誤。

+0

@Borgleader:這是因爲你將函數調用轉換爲函數。 – 2014-09-19 15:40:43

+1

我不明白的是你爲什麼要這樣稱呼它。它不需要任何參數,不會返回任何東西,它的主體只是創建(然後立即銷燬)一個本地對象。如果你的例子不那麼簡單,而且實際上做了什麼,你就會知道如何調用它。 – 2014-09-19 15:55:13

+0

這是我愚蠢的錯誤。 C++不允許調用主函數以外的函數。在這種情況下,編譯器將該表達式假定爲專門的函數模板。這使我困惑。 – user792883 2014-09-19 15:56:41

回答

4

在C++中,表達式(例如調用函數)只能在函數內部(或變量的初始值內部)發生。只是在功能外面打電話是一個錯誤。