Template class generate errors in C++
This program is not compiling. What's the problem?
#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;
}
Showing the following errors.
error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'std::string' (or there is no acceptable conversion) c:program files (x86)microsoft visual studio 10.0vcincludeostream(679): could be 'std::basic_ostream<_Elem,_Traits> &std::operator <<>(std::basic_ostream<_Elem,_Traits> &,const char *)' with [ _Elem=char, _Traits=std::char_traits ]
while trying to match the argument list '(std::ostream, std::string)' .....maptestmaptmaptmapt.cpp(16) : while compiling class template member function 'void Data::WriteData(void)' with [ T=int ]
It seems you forgot to:
#include <string>
You cannot count on transitive inclusion of all the necessary header files because some other header like <iostream>
may #include
them.
If you are using std::string
s, you should be #include
ing the appropriate header ( <string>
) explicitly.
Overloads of operator <<
which accept an std::string
are probably declared/defined in a header which is not #include
d by <iostream>
.
Besides, avoid having using
directives at global namespace scope such as this:
using namespace std;
They can easily lead to name clashes and it is normally regarded as a bad programming practice.
T_char is incorrect type as argv should have a type for example char*
Correct source code is
#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/68428.html
上一篇: 类异常和操作符
下一篇: 模板类在C ++中产生错误