在VC++中使用模板时发生C4430错误

C4430 error when using templates in VC++

本文关键字:C4430 错误 VC++      更新时间:2023-10-16

我对C++模板没有太多经验;遇到问题。也许,你可以看到我犯的愚蠢的错误。谢谢你的帮助!

常数.h:

#include "stdafx.h"
#include <io.h>
#include <sstream>
class Constants
{
public:
    [...]
    template<typedef const T>
    static CString ToString(T VALUE);
};

常量.pp:

template<typedef const T>
CString Constants::ToString(T VALUE)
{
    stringstream ss;
    ss << VALUE;
    CString csRow = ss.str().c_str();
    return csRow;
}

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


如果你是C++的新手,我强烈建议你拿起一本很好的C++入门书来阅读。这里的C++标签维基有一份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的定义。如果stdafx.h还没有包含cstringt.h,那么您可能需要包含它。

还要注意,标准库类型位于std命名空间中。这就是为什么有一个std::stringstream而不是简单的stringstream。您也可以使用using namespace std;,但永远不要在头文件中使用它。

避免对变量和参数使用UPPERCASE NAMES;它们通常是为宏保留的。

C4430 C++ does not support default-int

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

使用typename或class而不是typedef