对模板类的模糊引用 (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 <int> x
行上,我收到错误消息,指出“错误:对“距离”的引用不明确”。我无法弄清楚我的错误。
【问题讨论】:
无法重现您的编译错误。这显然不是产生编译错误的代码。您显示的代码无法满足minimal reproducible example 的所有要求,因此没有人可以帮助您;您最多只能随机猜测问题可能是什么。虽然我认为我对导致此结果的常见错误有一个很好的猜测,但由于您未能提供minimal reproducible example 来确认它,我无法确定。 我已经对其进行了编辑以包含我使用的头文件和库。你说的是这个吗? 是的,现在这证实了我的怀疑。 【参考方案1】:using namespace std;
你刚刚发现了why using namespace std;
is bad practice。
这会将 C++ 库的 std::distance
模板注入程序的全局命名空间,导致与您自己的 distance
模板发生名称冲突。
删除它,将所有cout
s 替换为std::cout
s,并修复来自getdata()
的返回值修复了所有编译错误。
将此作为学习经验:以后避免使用using namespace std;
,或者准备好处理神秘的编译错误。
【讨论】:
以上是关于对模板类的模糊引用 (C++)的主要内容,如果未能解决你的问题,请参考以下文章
为啥我不能返回对使用模板创建的派生类的 unique_ptr 的引用?