2012-02-29 70 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

使用类型名称或类,而不是类型定义

相关问题