C++新手问题:编译时提示:[Linker error] undefined reference to `operator*(double, complex c

我想写一个复数乘实数的函数(其中的复数是一个叫complex的class):classcomplex{private:doublem_r;//实部doublem_i;//... 我想写一个复数乘实数的函数(其中的复数是一个叫complex的class):
class complex
{
private:
double m_r; //实部
double m_i; //虚部
public:
complex operator*( double x) ;
friend complex operator*( double x, complex& st);
……剩下的省略
}

definition:
complex complex::operator*(double x)
{
complex result;
result.m_r=m_r*x;
result.m_i=m_i*x;
return result;
}

complex operator*(double x,complex& st)
{
return st*x;
}

但是编译时提示C++新手问题:下面的程序编译时提示 [Linker error] undefined reference to `operator*(double, complex c,如果我把两个函数的参数都改成const的,就可以顺利编译:
complex operator*(const double x) const ;
friend complex operator*(const double x, const complex& st);
不知道这是为什么。希望高手解答一下,谢谢!!
展开
 我来答
zhykzhykzhyk
2012-02-11 · TA获得超过395个赞
知道答主
回答量:140
采纳率:100%
帮助的人:218万
展开全部
有可能是你在friend申明时漏写了&,因为错误中的函数原型为operator*(double, complex c)。
威孚半导体技术
2024-08-19 广告
威孚(苏州)半导体技术有限公司是一家专注生产、研发、销售晶圆传输设备整机模块(EFEM/SORTER)及核心零部件的高科技半导体公司。公司核心团队均拥有多年半导体行业从业经验,其中技术团队成员博士、硕士学历占比80%以上,依托丰富的软件底层... 点击进入详情页
本回答由威孚半导体技术提供
xushaoqiu220
2012-02-18
知道答主
回答量:17
采纳率:0%
帮助的人:15.8万
展开全部
如果你的参数是const 的话,那你就可以给这个函数传一下常数 比如 12
但如果你的参数不是const的话,就只能传一个变量的类型,而不能传一个常量
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
poorcowboy
2012-02-06 · TA获得超过4291个赞
知道答主
回答量:281
采纳率:0%
帮助的人:167万
展开全部
如果我记得没错,会先编译friend那个函数,后编译类中的操作符重载,所以你不能在friend中调用类中的操作符重载,反之则可以
更多追问追答
追问
你好!抱歉啊你似乎没看到我问题结尾处的“如果我把两个函数的参数都改成const的,就可以顺利编译”……因此应该不是你说的这个问题。事实上我看的书中就是在friend中调用操作符重载的,也并没有出现问题。关键应该是这个const的问题。谢谢!
追答
你用的什么编译器?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
baisaichen
2012-02-16
知道答主
回答量:2
采纳率:0%
帮助的人:2.9万
展开全部
你在调用*操作符的时候,参数可能是一个const类型的!而在你的定义中,参数是非const类型,编译器不确定你会不会修改参数的值,所以不会为你的const类型调用非const版本!
我想应该是这样的,不知道能不能帮到你
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式