御前攻略 微盘:一个C++警告,高手来看下怎么回事?
来源:百度文库 编辑:中科新闻网 时间:2024/10/05 11:23:32
这个编程是我为了测试运算符+时写的,没有其它什么函数
本来用名字空间出错,现在已解决,但还是有一个警告,虽然可以运行
但我想明白哪里出错,请高手调试没错时,告诉我正确答按.还有如何
使+重载符只有一个参数,this指针可以用吗?
#include <iostream.h>
//using namespace std;//使用名字空间会出错,所以不使用
class OPE
{
public:
OPE();
void set_m(const int &t);
int & back_m(void);
friend OPE &operator+(OPE &a,OPE &b);
private:
int num,sum;
};
OPE::OPE()
{
num=sum=0;
}
void OPE::set_m(const int &t)
{
num=t;
}
int & OPE::back_m(/*不用加void也可通过编译*/)
{
return num;
}
OPE &operator+(OPE &a,OPE &b) //如何做使得只用一个参数
{
OPE t;
t.num=a.num+b.num;
return t ;
}
void main()
{
OPE a,b,s;
a.set_m(39);
b.set_m(41);
s=a+b;
cout<<"sum:\t"<<s.back_m()<<"\n";
}
下面是编译时的警告信息:
---------Configuration: A_TEST - Win32 Debug--------------------
Compiling...
Temp.cpp
E:\MATE\VC\A_TEST\Temp.cpp(33) : warning C4172: returning address of local variable or temporary
Temp.obj - 0 error(s), 0 warning(s)
一楼的,你怎么可以在我这讲这样的话,太损人了.
本来用名字空间出错,现在已解决,但还是有一个警告,虽然可以运行
但我想明白哪里出错,请高手调试没错时,告诉我正确答按.还有如何
使+重载符只有一个参数,this指针可以用吗?
#include <iostream.h>
//using namespace std;//使用名字空间会出错,所以不使用
class OPE
{
public:
OPE();
void set_m(const int &t);
int & back_m(void);
friend OPE &operator+(OPE &a,OPE &b);
private:
int num,sum;
};
OPE::OPE()
{
num=sum=0;
}
void OPE::set_m(const int &t)
{
num=t;
}
int & OPE::back_m(/*不用加void也可通过编译*/)
{
return num;
}
OPE &operator+(OPE &a,OPE &b) //如何做使得只用一个参数
{
OPE t;
t.num=a.num+b.num;
return t ;
}
void main()
{
OPE a,b,s;
a.set_m(39);
b.set_m(41);
s=a+b;
cout<<"sum:\t"<<s.back_m()<<"\n";
}
下面是编译时的警告信息:
---------Configuration: A_TEST - Win32 Debug--------------------
Compiling...
Temp.cpp
E:\MATE\VC\A_TEST\Temp.cpp(33) : warning C4172: returning address of local variable or temporary
Temp.obj - 0 error(s), 0 warning(s)
一楼的,你怎么可以在我这讲这样的话,太损人了.
你的重载的+函数要求返回OPE类型的引用值,但函数实现时return的t是其局部变量,在离开函数后t就被销毁了,就有可能导致返回的值不可用。
其实直接把返回类型设为OPE就好了。
OPE &operator+(OPE &a,OPE &b) //如何做使得只用一个参数
{
OPE t;
t.num=a.num+b.num;
return t ;
}
t 为临时变量,函数结束后就被释放,所以通过return t 获取的OPE 引用就指向无效地址,这样肯定会出错。
射精最舒服啊