2012-02-29 57 views
0

我對C++模板&遇到問題並不那麼有經驗。也許,你可以看到我正在做的愚蠢的錯誤。感謝您的幫助!在VC++中使用模板時出現C4430錯誤

Constants.h:

#include "stdafx.h" 
#include <io.h> 
#include <sstream> 

class Constants 
{ 
public: 
    [...] 
    template<typedef const T> 
    static CString ToString(T VALUE); 
}; 

Constants.cpp:

template<typedef const T> 
CString Constants::ToString(T VALUE) 
{ 
    stringstream ss; 

    ss << VALUE; 

    CString csRow = ss.str().c_str(); 

    return csRow; 
} 
+0

當您發佈關於錯誤的問題還包括行號也 – 2012-02-29 09:15:39

回答

4

對於未來的堆棧溢出引用,複製和粘貼逐字任何和所有的編譯器錯誤,並指出該線數字在你的代碼片段中。


如果您是C++的新手,我強烈建議您pick up a good introductory C++ book並閱讀它。這裏的C++標籤wiki有一個C++社區在Stack Overflow上推薦的書籍列表。


您發佈的代碼段存在多個問題。這就是我可以從片段的目視檢查見:

變化typedef const Ttypename T和移動定義爲標題:

class Constants 
{ 
public: 
    [...] 
    template<typename T> 
    static CString ToString(T value); 
    { 
     std::stringstream ss; // Note std:: prefix! 
     ss << value; 
     CString csRow = ss.str().c_str(); 
     return csRow; 
    } 
}; 

(您也可以使用class T代替typename T;它們都是等效這種情況)。

確保編譯器可以看到CString的定義。 You may need to include cstringt.h if stdafx.h does not do that that already。

另請注意,標準庫類型存在於std命名空間中。這就是爲什麼有std::stringstream那裏,而不是簡單的stringstream。您也可以使用using namespace std;,但不要在頭文件中使用它。

避免使用UPPERCASE NAMES作爲變量和參數;它們通常被保留用於宏。

+0

非常感謝!隨着cstringt.h包括,它現在正確運行! – Sae1962 2012-02-29 09:24:50

0
C4430 C++ does not support default-int 

只是檢查出其中的錯誤彈出線和檢查,看看是否你已經錯過了在變量聲明任何類型說明符或fubctions

0

使用類型名稱或類,而不是類型定義

相關問題