在VC ++中使用模板时出现C4430错误

时间:2012-02-29 09:09:29

标签: c++ templates

我对C ++模板&遇到问题。也许,你可以看到我正在做的愚蠢的错误。谢谢你的帮助!

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;
}

3 个答案:

答案 0 :(得分:4)

有关Stack Overflow的未来参考,请逐字复制并粘贴任何和所有编译器错误,并在代码段中指出行号。


如果您是C ++新手,我强烈建议您pick up a good introductory C++ book阅读它。这里的C ++标签wiki有一个C ++社区在Stack Overflow上推荐的书籍列表。


您发布的代码段存在多个问题。以下是从视觉检查片段中可以看到的内容:

typedef const T更改为typename 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 stdafx.h如果std尚未执行此操作。

另请注意,标准库类型位于std::stringstream命名空间中。这就是为什么stringstream而不仅仅是using namespace std;的原因。您也可以使用UPPERCASE NAMES,但不要在头文件中使用它。

避免对变量和参数使用{{1}};它们通常用于宏。

答案 1 :(得分:0)

C4430 C++ does not support default-int

只需查看弹出错误的行,然后检查您是否遗漏了变量声明或空白中的任何类型说明符

答案 2 :(得分:0)

使用typename或class而不是typedef