模板类在C ++中产生错误
这个程序没有编译。 有什么问题?
#include<iostream>
#include<map>
using namespace std;
template<class T>class Data{
string header;
T data;
public:
Data(string h, T d){header = h, data = d;}
void WriteData()
{
cout<<header<<": "<<data<<endl;
}
};
int main(int argc, _TCHAR* argv[])
{
Data<int> idata("Roll", 100);
Data<string>sdata("Name","Jakir");
idata.WriteData();
sdata.WriteData();
return 0;
}
显示以下错误。
错误C2679:二进制'<<':找不到操作符找到'std :: string'类型的右手操作数(或没有可接受的转换)c: program files(x86) microsoft visual studio 10.0 vc include ostream(679):可以是[std :: basic_ostream <_Elem,_Traits>&std :: operator <<>(std :: basic_ostream <_Elem,_Traits>&,const char *)'[_Elem = char, _Traits = std :: char_traits]
当试图匹配参数列表'(std :: ostream,std :: string)'..... maptest mapt mapt mapt.cpp(16):编译类模板成员函数'void Data :: WriteData(void)'与[T = int]
你似乎忘了:
#include <string>
您不能传递包括所有必要的头文件的计,因为像其他一些标题<iostream>
可以#include
它们。
如果您使用std::string
s,则应该#include
显式包含适当的头( <string>
)。
的过载operator <<
其接受std::string
可能正在声明/在其中的是不是一个报头中定义#include
被D <iostream>
此外,避免在全局命名空间作用域中using
指令,例如:
using namespace std;
他们很容易导致名称冲突,通常被认为是不好的编程习惯。
T_char是不正确的类型,因为argv应该有一个类型例如char *
正确的源代码是
#include<iostream>
#include<map>
#include<string>
using namespace std;
template<class T>class Data{
string header;
T data;
public:
Data(string h, T d){header = h, data = d;}
void WriteData()
{
cout<<header<<": "<<data<<endl;
}
};
int main(int argc, char* argv[])
{
Data<int> idata("Roll", 100);
Data<string>sdata("Name","Jakir");
idata.WriteData();
sdata.WriteData();
return 0;
}
链接地址: http://www.djcxy.com/p/68427.html
上一篇: Template class generate errors in C++
下一篇: Error C2664 in hid