试图改变类变量的值

时间:2014-11-10 17:36:14

标签: c++ qt class variables

程序破碎,当我试图改变类变量时 例如:

class ITask
{
public:
ITask();
void perform(int,int);
private:
int total = 0;
}
__________implementation___________
void ITask::perform(int a,int b)
{
int time=rand()%10;
this->total=time;
}

没有字符串this->total=time;程序可以正常工作。

1 个答案:

答案 0 :(得分:3)

正如您所说,您使用ITask* task; task->perform(a,b);。但是,ITask* task;仅声明指向ITask的指针,它不会创建实例。因此,您的perform成员函数会尝试写入它认为total所在的内存位置,但实际上内存未分配用于此目的。因此崩溃取决于行this->total=time;的存在。但请注意,它在没有该行的情况下工作的事实纯粹是实现定义的,因为在没有实例的情况下调用非静态成员函数仍然是未定义的行为,即没有有效的this指针。

使用

 ITask task;
 task.perform(a,b);

(为函数本地创建ITask)或

ITask* task = new ITask();
task->perform(a,b);
//later deallocate:
delete task;

(创建一个ITask,直到你调用delete为止。两者都创建实际对象。