this-> operator =()无效

时间:2013-03-18 21:52:58

标签: c++ class operators runtime-error

我正在使用directX在c ++中制作游戏

但我也有游戏的控制台版本(使用'X和其他角色代表事物)

我有以下代码:

Unit::Unit(UnitType u){
    ZeroAll();                        // function that zeros all variables
    this->operator=(fileToUnit(u));   // error making code
}

UnitType是一个简单的枚举数据类型,有三个值{Infantry,Alien,Predator}。

操作员功能定义如下

Unit operator= (Unit u) { return u; }

fileToUnit是......

Unit fileToUnit(UnitType u);

只需创建一个临时单位并返回它。我真的不知道怎么做,但我需要在构造函数中更改整个类。

编辑:  抱歉这么不明确

我的问题是:  如何使类根据函数的结果更改其值

喜欢

this = functionReturningSameDataType( DataType ConstructorParameters );

错误如下

Microsoft Visual C++ Runtime Library

Debug Assertion Failed!

Program: C:\Windows\system32\MSVCP110D.dll
File: C:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring
Line: 1143

Expression: invalid null pointer

For Information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts.

(Press Retry to Debug the application)

1 个答案:

答案 0 :(得分:0)

如果我正确理解你的问题,你有一个自由函数,它以UnitType为参数,以某种方式构造Unit,这可能是基于UnitType实例,然后将其返回给构造函数Unit::Unit(UnitType)

我不确定在这种情况下我是否完全理解Unit fileToUnit(UnitType u)的目的。为什么它是免费功能?使它成为一个成员函数并从构造函数中调用它:

class Unit
{
private:
   // Example data members
   int foo;
   int bar;
public:
   Unit(UnitType u)
   {
      fileToUnit(UnitType u);
   };
private:
   void fileToUnit(UnitType u)
   {
       // Set data members here
       foo = 1;
       bar = 1;
   };
};

编辑:在我这样的简化示例中,fileToUnit根本不需要存在,代码应该直接在构造函数中:

class Unit
{
private:
   // Example data members
   int foo;
   int bar;
public:
   Unit(UnitType u)
   {
      // Set foo and bar here, using whatever
      // information you need from u
   };
};