我对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;
}
答案 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