模板类在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