对模板类的模糊引用 (C++)

Posted

技术标签:

【中文标题】对模板类的模糊引用 (C++)【英文标题】:Ambiguous reference to template class (C++) 【发布时间】:2020-02-13 03:45:00 【问题描述】:

我是模板类的新手,并尝试实现一个非常简单的程序,只是为了尝试功能和语法。 我初始化了一个模板类距离,然后尝试获取数据并显示出来。

#include<iostream>
using namespace std;

template <class T>

class distance 

T feet;
T inches;

public:
    distance ()
    

    
T getdata (T f, T i)

    feet=f;
    inches=i;

void showdata ()

    cout<<"Distance is "<<feet<<" feet and "<<inches<<" inches";


;

int main ()



    distance <int> x;
    x.getdata(5,7);
    x.showdata();



但是,在distance &lt;int&gt; x 行上,我收到错误消息,指出“错误:对“距离”的引用不明确”。我无法弄清楚我的错误。

【问题讨论】:

无法重现您的编译错误。这显然不是产生编译错误的代码。您显示的代码无法满足minimal reproducible example 的所有要求,因此没有人可以帮助您;您最多只能随机猜测问题可能是什么。虽然我认为我对导致此结果的常见错误有一个很好的猜测,但由于您未能提供minimal reproducible example 来确认它,我无法确定。 我已经对其进行了编辑以包含我使用的头文件和库。你说的是这个吗? 是的,现在这证实了我的怀疑。 【参考方案1】:
using namespace std;

你刚刚发现了why using namespace std; is bad practice。

这会将 C++ 库的 std::distance 模板注入程序的全局命名空间,导致与您自己的 distance 模板发生名称冲突。

删除它,将所有couts 替换为std::couts,并修复来自getdata() 的返回值修复了所有编译错误。

将此作为学习经验:以后避免使用using namespace std;,或者准备好处理神秘的编译错误。

【讨论】:

以上是关于对模板类的模糊引用 (C++)的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能返回对使用模板创建的派生类的 unique_ptr 的引用?

C++模板类和类模板

C++将模板的声明和定义放置在同一个头文件里

如果给定模板参数,是不是有可以将模板类转换为实际类的 C++ 工具? [关闭]

Vector模板类的建立与实现

c++中模板类的目的是啥