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

标签 c++ templates

我对 C++ 模板不太熟悉并且遇到了问题。也许,您可以看到我正在做的愚蠢错误。感谢您的帮助!

常量.h:

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

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

常量.cpp:

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

    ss << VALUE;

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

    return csRow;
}

最佳答案

为了将来在 Stack Overflow 上引用,请逐字复制并粘贴所有编译器错误,并指出代码片段中的行号。


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


您发布的代码片段存在多个问题。这是我通过目视检查代码段可以看到的内容:

typedef const T 更改为 typename T 并将定义移动到 header 中:

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;它们通常保留给宏。

关于c++ - 在 VC++ 中使用模板时出现 C4430 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9496261/

相关文章:

c++ - D 和 C++ 目前的互操作状态

c++ - 虚幻引擎 4.18.2 "no default constructor exists for class "UUserWidget""

c++ - 如何防止模板类的实例化?

c++ - 一个类可以有一个没有参数的模板化构造函数吗?

c++ - 真正测试std::atomic是否无锁

c++ - 全局变量的constexpr初始化

python - 如何为类类型创建 OUTPUT 类型映射?

amazon-web-services - AWS CloudFormation - 从其他模板导入条件

templates - Aurelia:嵌套模板替换

c++ - 多变量模板委托(delegate)系统