我的参数化构造函数说我的字符串变量是未定义的?

时间:2014-03-12 14:04:26

标签: c++

抱歉,我很喜欢编程,需要帮助,所以我可以继续我的其他任务。 这是我的计划如下:

#include<iostream>
#include"date.h"
#include<string>

using namespace std;

int main()
{ 
    //string thurs;
    Date myDate(thurs,12,2014);
    cout<<"Day is: "<<myDate.getDay()<<endl;
    cout<<"month is: "<<myDate.getMonth()<<endl;
    cout<<"month is: "<<myDate.getYear()<<endl;
}

在哪里说“thurs”它说它是未声明的,我试图声明它但它仍然没有解决我的问题,这就是为什么我评论它。

这是我的班级,我不确定这是不是问题:

#include<iostream>

using namespace std;

class Date
{
    private:
        string day;
        int month;
        int year;

    public:
        Date(string day,int month,int year); //Param Constructor
        void setDay(string);
        void setMonth(int);
        void setYear(int);
        string getDay();
        int getMonth();
        int getYear();
};

最后是我的Setters / Getters,不确定这可能是问题所在:

#include"date.h"

Date::Date(string day,int month, int year)
{
    this->day=day;
    this->month=month;
    this->year=year;
}

//getters
string Date::getDay()
{
    return day;
}

int Date::getMonth()
{
    return month;
}

int Date::getYear()
{
    return year;
}


//Setters
void Date::setDay(string d)
{
    day=d;
}

void Date::setMonth(int m)
{
    month=m;
}

void Date::setYear(int y)
{
    year=y;
}

目前它显示除了“thurs”之外的所有内容 - 任何帮助和抱歉可怕的布局&gt;。&lt;

4 个答案:

答案 0 :(得分:4)

在C ++中,字符串文字必须用双引号"括起来,所以你可以这样做:

// Note "thurs" instead of thurs
Date myDate("thurs", 12, 2014);

或者你可以这样做:

string thurs = "thurs";         // Initialize a std::string with string literal "thurs"
Date myDate(thurs, 12, 2014);   // Pass std::string instance

作为旁注,当你想要传递不便宜的参数(例如不是int,而是像string这样的参数本地副本,请考虑从值中传递值std::move(),例如:

Date::Date(string d, int m, int y)
        : day( std::move(d) )
        , month(m)
        , year(y)
{ }

void Date::setDay(string d)
{
    day = std::move(d);
}

另请注意,由于getter不会修改Date的内部状态,因此您可能希望将其标记为const

string Date::getDay() const
{
    return day;
}

int Date::getMonth() const
{
    return month;
}

int Date::getYear() const
{
    return year;
}

答案 1 :(得分:1)

尝试

Date myDate("thurs",12,2014);

请注意,parens在这里完全不同 - 将变量名称改为字符串。

答案 2 :(得分:0)

您需要定义字符串变量,如string thurs("literal");

答案 3 :(得分:0)

Date myDate(thurs,12,2014);

应该是

Date myDate("thurs",12,2014);
祝你好运!