我正在努力完成我的作业.在Distance类中创建一个重载*操作符
i am trying to complete my assignment.which says In a Distance class create an overloaded * operator
我正在努力完成我的作业。在Distance类中创建一个重载*操作符,以便两个距离可以相乘。下面是我的程序:
#include<iostream>
using namespace std;
class distance
{
private:
int a;
public:
distance():a(10){}
distance(int x)
{
a=x;
}
void print()
{
cout<<"n a = "<<a<<" n ";
}
distance operator *(distance);
};
distance distance :: operator *(distance d)
{
a=a*d.a;
return distance(a);
}
int main()
{
distance d1,d2,d3;
d1.print();
d2.print();
d3.print();
d3=d1 * d2;
d3.print();
return 0;
}
但是我得到一个编译错误说:
'distance' : ambiguous symbol.
当我在vc++上运行时
但是它在Turbo C上运行良好(通过微小的改变:#include<iostream.h>
)。
请解释我错在哪里。
已经有一个名为std::distance
的函数,您将通过using namespace std
将其引入范围,并且与您的distance
类发生冲突。
将你的类命名为其他名称(例如Distance
),或者更好的是,删除using namespace std
。
注:这很好地说明了为什么这种方式的using namespace X
通常不是一个好主意
从代码中删除using namespace std;
,并在适当的符号前面加上std::
。在标准模板中为迭代器定义了一个std::distance
名称。
(如果您的operator*
将distance const& d
作为其参数会更好)
distance
也是标准库中模板函数的名称。我强烈怀疑,因为你是using namespace std;
,它是模糊的。
您不希望声明的名称是由其他人提到的同一作用域内的另一个名称空间注入的。因为它的名称隐藏了名称空间成员,所以您可以使用::
作用域操作符来引用您自己的名称,也可以更改类的名称。假设您将distance
命名为distance1
,您希望将乘法运算符编写为:
distance1 distance1::operator* (const distance1 &d1)
{
return distance1(a*d1.a);
}
相关文章:
- 一个关于在C++中重载布尔运算符的问题
- 为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?
- C++重载函数,一个采用基类的参数,另一个采用派生类的参数
- 我在 .h 中有一个枚举类,并且在.cpp错误中有一个运算符重载:与"运算符<<不匹配
- 运算符重载:"operator+"必须采用零个或一个参数
- 重载运算符*以获取对另一个类的实例的引用
- 我重载了 << 和 = 运算符。为什么当我将一个对象分配给另一个对象并尝试打印它时,我会被打印出来?
- MSVC 错误:4 个重载中的任何一个都无法转换所有参数类型
- 为什么我得到 C2883:函数声明与 - 在仅覆盖基类中的一个重载时通过使用 - delcaration 引入
- 尝试将节点插入链表中,但我需要一个重载运算符<函数
- 如果存在可以匹配另一个重载函数的函数模板,将调用哪个函数
- 根据可用的参数使用一个或另一个重载的创建者
- 重载运算符试图将另一个重载运算符作为参数
- 当涉及一个重载函数作为实参时,模板实参推导是如何工作的
- 我正在努力完成我的作业.在Distance类中创建一个重载*操作符
- 当派生类中存在另一个重载时,无法调用基类的方法
- C++ - 链接器找不到我的函数,它恰好是一个重载运算符
- 将类构造函数重载放在同一类的另一个重载中
- 可以在c++中调用另一个重载构造函数吗?
- 定义一个重载函数的类型