我对 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/