C++,用自己定义的类创建一个数组,每一个数组元素都是这个类,但是赋值不进去 10

应该是这部分哪里出错了,但是不知道怎么改。求大神指点。代码:main.cppinclude"X.h"intmain(){Task*t;stringn;intdur,dea... 应该是这部分哪里出错了,但是不知道怎么改。求大神指点。
代码:

main.cpp
include"X.h"
int main()
{
Task *t;

string n;
int dur,deadl;

cout<<"输入你的任务名称."<<endl;
cin >> n;

cout<<"输入你的任务时间."<<endl;
cin>> dur;

cout<<"输入你的任务截止日期."<<endl;
cin>>deadl;

t->setDeadline(deadl);t->setDuration(dur);t->setTaskname(n);
//这里好像赋值不进去,一运行到这里就程序中断。。。


X.h
class Task {
string taskname ;
int duration;
int deadline;
public:
Task( string& n, unsigned int dur, unsigned int dl):taskname(n),duration(dur),deadline(dl){}
~Task(){}
string& getTaskname() { return taskname; }
void setTaskname(string& n){taskname = n;}
unsigned int getDuration() const { return duration; }
void setDuration(int dur){duration = dur;}
unsigned int getDeadline() const { return deadline; }
void setDeadline(int dl){ deadline = dl;}
void afficher(std::ostream& a = std::cout);
Task operator =(Task &t);
};
展开
 我来答
splashchaos
2014-10-26 · TA获得超过1.1万个赞
知道大有可为答主
回答量:3342
采纳率:0%
帮助的人:3671万
展开全部

你的程序有一个错误,需要两个修改。

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 duration;
    int deadline;
public:
    Task(){} //缺省构造函数
    Task( string& n, unsigned int dur, unsigned int dl):taskname(n),duration(dur),deadline(dl){}
    ~Task(){}
    string& getTaskname() { return taskname; }
    void setTaskname(string& n){taskname = n;}
    unsigned int getDuration() const { return duration; }
    void setDuration(int dur){duration = dur;}
    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 dur,deadl;
    
    cout<<" 输入你的任务名称."<<endl;
    cin >> n;
    
    cout<<"输入你的任务时间."<<endl;
    cin>> dur;
    
    cout<<"输入你的任务截止日期."<<endl;
    cin>>deadl;

    t.setDeadline(deadl);t.setDuration(dur);t.setTaskname(n);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ynlxpwk
2014-10-25 · TA获得超过777个赞
知道小有建树答主
回答量:857
采纳率:0%
帮助的人:314万
展开全部
编译有什么提示?
t->setDeadline(deadl);t->setDuration(dur);t->setTaskname(n);
改为:
t.setDeadline(deadl);t.setDuration(dur);t.setTaskname(n);
追问
t.setDeadline(deadl);不行,编译的时候直接报错了。如果t->setDeadline(deadl);编译没有报错。我初始化t = 0,报错:有未经处理的异常: 0xC0000005: 写入位置 0x00000020 时发生访问冲突
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式