注册 登录
编程论坛 C++教室

返回局部变量或临时变量的地址警告

OscarWu 发布于 2015-05-25 13:57, 2324 次点击
各位高手,请帮我分析一下下列代码为何编译时出现“ warning C4172: 返回局部变量或临时变量的地址”,如何修改?谢谢!   
class  DateTime
   {
      public:
         // constructors
         DateTime();
         // destructor
         ~DateTime();

         // manipulators
             DateTime* operator&(DateTime input);
   };

// Operators
DateTime* DateTime::operator&(DateTime input)
{
   return &input;
}
4 回复
#2
rjsp2015-05-25 14:08
DateTime* DateTime::operator&(DateTime input)
{
   return &input;
}
看你代码,无从下手,因为不知道你想干什么。(你需要多看书,多思考,两者都缺)
DateTime* DateTime::operator&()
{
    return this;
}
const DateTime* DateTime::operator&() const
{
    return this;
}
当然,虽然可以编译通过,但还是不懂你想干什么
#3
OscarWu2015-05-25 14:55
谢谢回复。我想完成下面一些操作:
   typedef struct {
      long        mjd;
      double      fracOfDay;
   }  MJD;
   class  DateTime
   {
      friend ostream &operator<<( ostream &output, DateTime &dt );

      public:
         // constructors
         DateTime();
         DateTime( Time time );

         // destructor
         ~DateTime();

         // initializers
         void  SetTime( Time time );

         // selectors
         GPSTime      GetTime();      
         // manipulators
         const DateTime &operator=(const DateTime &DT2);
     DateTime* operator&(DateTime input);
         DateTime operator + ( const double days );
         double   operator - ( const DateTime &DT2 );
         bool    operator == ( const DateTime &DT2 );
         bool    operator != ( const DateTime &DT2 );
         bool    operator >  ( const DateTime &DT2 );
         bool    operator >= ( const DateTime &DT2 );
         bool    operator <  ( const DateTime &DT2 );
         bool    operator <= ( const DateTime &DT2 );
      private:
         long        mjd;
         double      fractionOfDay;
   };


DateTime* DateTime::operator&(DateTime input)
{
   return &input;
}

// const return avoids: (a1 = a2 ) = a3
const DateTime &DateTime::operator=(const DateTime &DT2)
{
   if( &DT2 != this ) // avoids self assignment
   {
     mjd = DT2.mjd;
     fractionOfDay = DT2.fractionOfDay;
   }
   return *this;
}
#4
wmf20142015-05-25 22:30
问题出在 return &input;input是一个不确定的局部变量,用它作为指针可能是一个无有效值的指向,你如果改成下述代码可能没有警告:
DateTime* DateTime::operator&(DateTime input)
{
   DateTime *p;
   p=new DateTime;
   *p=input;
   return p;
}

#5
OscarWu2015-05-26 13:05
谢谢,没有警告了。
1