C++,用自己定义的类创建一个数组,每一个数组元素都是这个类,但是赋值不进去
发布网友
发布时间:2023-05-04 23:02
我来回答
共2个回答
热心网友
时间:2023-11-06 01:24
你的程序有一个错误,需要两个修改。
1. 错误: 主程序里面的
Task *t;
t 是一个指针,它需要具体的指向某个变量,才能使用;否则t指向的就是一个“野”地址,如果是其数据的空间,就发生冲突,程序就会崩溃。你可以用new分配一个新地址,然后在程序退出签delete即可。干脆不要指针,用一个变量,还简单些。
2. 修改: 简单的修改为:
Task t;
但这是由于你的Task定义里面没有构造函数,即t是需要带参数的;否则编译都不会通过,因此你可以添加一个缺省构造函数:
Task(){}
然后main程序里面,所有原来【t->】 修改为【t.】
整理后的程序如下:
#include <iostream>
using namespace std;
class Task {
string taskname ;
int ration;
int deadline;
public:
Task(){} //缺省构造函数
Task( string& n, unsigned int r, unsigned int dl):taskname(n),ration(r),deadline(dl){}
~Task(){}
string& getTaskname() { return taskname; }
void setTaskname(string& n){taskname = n;}
unsigned int getDuration() const { return ration; }
void setDuration(int r){ration = r;}
unsigned int getDeadline() const { return deadline; }
void setDeadline(int dl){ deadline = dl;}
void afficher(std::ostream& a = std::cout);
Task operator =(Task &t);
};
int main(int argc, char** argv)
{
Task t; //不要用指针,否则应该指向某个变量,或用new分配地址(记得结束前delete)
string n;
int r,deadl;
cout<<" 输入你的任务名称."<<endl;
cin >> n;
cout<<"输入你的任务时间."<<endl;
cin>> r;
cout<<"输入你的任务截止日期."<<endl;
cin>>deadl;
t.setDeadline(deadl);t.setDuration(r);t.setTaskname(n);
}
热心网友
时间:2023-11-06 01:24
编译有什么提示?
t->setDeadline(deadl);t->setDuration(r);t->setTaskname(n);
改为:
t.setDeadline(deadl);t.setDuration(r);t.setTaskname(n);追问t.setDeadline(deadl);不行,编译的时候直接报错了。如果t->setDeadline(deadl);编译没有报错。我初始化t = 0,报错:有未经处理的异常: 0xC0000005: 写入位置 0x00000020 时发生访问冲突
热心网友
时间:2023-11-06 01:24
你的程序有一个错误,需要两个修改。
1. 错误: 主程序里面的
Task *t;
t 是一个指针,它需要具体的指向某个变量,才能使用;否则t指向的就是一个“野”地址,如果是其数据的空间,就发生冲突,程序就会崩溃。你可以用new分配一个新地址,然后在程序退出签delete即可。干脆不要指针,用一个变量,还简单些。
2. 修改: 简单的修改为:
Task t;
但这是由于你的Task定义里面没有构造函数,即t是需要带参数的;否则编译都不会通过,因此你可以添加一个缺省构造函数:
Task(){}
然后main程序里面,所有原来【t->】 修改为【t.】
整理后的程序如下:
#include <iostream>
using namespace std;
class Task {
string taskname ;
int ration;
int deadline;
public:
Task(){} //缺省构造函数
Task( string& n, unsigned int r, unsigned int dl):taskname(n),ration(r),deadline(dl){}
~Task(){}
string& getTaskname() { return taskname; }
void setTaskname(string& n){taskname = n;}
unsigned int getDuration() const { return ration; }
void setDuration(int r){ration = r;}
unsigned int getDeadline() const { return deadline; }
void setDeadline(int dl){ deadline = dl;}
void afficher(std::ostream& a = std::cout);
Task operator =(Task &t);
};
int main(int argc, char** argv)
{
Task t; //不要用指针,否则应该指向某个变量,或用new分配地址(记得结束前delete)
string n;
int r,deadl;
cout<<" 输入你的任务名称."<<endl;
cin >> n;
cout<<"输入你的任务时间."<<endl;
cin>> r;
cout<<"输入你的任务截止日期."<<endl;
cin>>deadl;
t.setDeadline(deadl);t.setDuration(r);t.setTaskname(n);
}
热心网友
时间:2023-11-06 01:24
编译有什么提示?
t->setDeadline(deadl);t->setDuration(r);t->setTaskname(n);
改为:
t.setDeadline(deadl);t.setDuration(r);t.setTaskname(n);追问t.setDeadline(deadl);不行,编译的时候直接报错了。如果t->setDeadline(deadl);编译没有报错。我初始化t = 0,报错:有未经处理的异常: 0xC0000005: 写入位置 0x00000020 时发生访问冲突