【问题标题】:Template class generate errors in C++模板类在 C++ 中生成错误
【发布时间】:2013-04-14 07:52:09
【问题描述】:

此程序未编译。有什么问题?

#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;
}

显示以下错误。

error C2679: binary ' &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=整数 ]

【问题讨论】:

    标签: c++ class templates


    【解决方案1】:

    您似乎忘记了:

     #include <string>
    

    你不能指望传递包含所有必要的头文件,因为像&lt;iostream&gt;这样的其他头文件可能#include它们。

    如果您使用std::strings,您应该明确#includeing 适当的标头(&lt;string&gt;)。

    接受std::stringoperator &lt;&lt; 的重载可能在&lt;iostream&gt;不是 #included 的标头中声明/定义。

    此外,避免在全局命名空间范围内使用 using 指令,例如:

    using namespace std;
    

    它们很容易导致名称冲突,这通常被认为是一种糟糕的编程习惯。

    【讨论】:

    • 天哪。我犯了什么错误。非常感谢。它破坏了我的 2 个小时。再次感谢。
    • @JakirHossain:我们都去过那里;)祝你的项目好运
    【解决方案2】:

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 2015-08-05
      • 2012-10-04
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      • 2022-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多