当前位置: 首页 > 知识库问答 >
问题:

模板类在C中生成错误

金瑞
2023-03-14

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

#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::ostream,std::string)。。。。。\maptest\mapt\mapt\mapt。cpp(16):使用[T=int]编译类模板成员函数“void Data::WriteData(void)”时

共有2个答案

钦德佑
2023-03-14

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;
}
柳玄裳
2023-03-14

你好像忘了:

 #include <string>

您不能指望所有必要的头文件都能以可传递的方式包含,因为其他头文件如

如果您使用的是std::strings,则应#包括ing适当的标题(

运算符的重载

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

using namespace std;

它们很容易导致名称冲突,这通常被视为一种糟糕的编程实践。

 类似资料:
  • 这里有一个最小的例子来说明我遇到的问题。 模板成员显式专用于基类中的。模板的代码是显式生成的,并在成员中调用。 我发现的第一个问题是: 该错误是由于在main中调用造成的。可以通过调用来避免这种情况。为什么在的实例中显然是不可见的?

  • 我试图做到以下几点:一个模板化的类应该提供一些函数,这些函数取决于它模板化的类型是否包含一个具有给定名称的成员变量。作为示例,下面的伪代码应该只在模板化的结构/类具有名为“id”的成员时才提供“printId()”: 通过研究SFINAE,traits,std::enable_if和StackOverflow,我认为这是可以做到的...但是我不知为什么没有将enable_if与以下问题中的片段结合

  • 我有一个ASP。NET核心应用程序,使用身份进行用户管理。 我有一个,它准备通过smtp发送电子邮件以用于帐户激活目的: 然而,由于字符

  • 我有下面的代码,我希望TestEnableIf与不同的专门化有不同的打印功能,但它没有按计划工作,错误如下。 我不明白的是,sfinae应该意味着专门化失败不是错误,那么编译器为什么要抱怨失败?

  • 我是新使用模板。作为标题,我有一个非模板类(Obj和ObjBase)和一个模板类pitem。我想让pItem::RefValue()访问obj中的私有成员。 我想下面的行得通: 它不: 错误C2248:“obj::GetValue”:无法访问类“obj”中声明的私有成员 注意:请参阅对正在编译的函数模板实例化“int PItem::GetValue(void)”的引用 编译器投诉:

  • 我有一个问题,我想在下面的代码中专门化模板类的模板成员函数。这个问题的答案是模板类成员函数的显式特化,这似乎表明它无法完成。这是正确的吗,如果是这样,我可以使用任何解决方法,以便在编译时通过内联inc函数进行扩展? 非常感谢! g吐槽道: test2.cpp:32:13: 错误: 非命名空间作用域中的显式专用化 'struct IdxIterator' test2.cpp:32:25: 错误: 非