-4

我想问一些对我来说相当困难的事情;我必须制作一个日历类型的程序,但要使用重载的 '+=' 运算符。

所以它是这样的:

template<typename T1,typename T2,typename T3> //int,int,int
class T_sort_data{

T1 p1;
T2 p2;
T3 p3;

public:

    T_sort_data(){
        cout << "\n\t Constructed at [" << this << "]\n";};

/   friend ostream& operator<<(ostream& os,const T_sort_data& obj) // get function
{
    os << "\nDay : " << obj.p1 << " \n";
    os << "Month : " << obj.p2 << " \n";
    os << "Year : " << obj.p3 << " \n";
    return os;
}*/

void set_date(){
    int dd,mm,yy;
    cout << "\n\n\tPlease input the day, the month and the year : \n\n";
    cin >> dd >> mm >> yy;
    p1 = dd;
    p2 = mm;
    p3 = yy;
}

// validator here, which works ...  

T_sort_data<int,int,int>& operator+=(const T_sort_data<int,int,int>& second)
{
    p1+=second.p1;
    return *this;
}

friend istream& operator>>(istream& is, T_sort_data& obj) // set function
{
    is >> obj.p1;
    is >> obj.p2;
    is >> obj.p3;
    return is;
}

~T_sort_data(){
    cout << "\n\t Deconstructed [" << this << "]\n";};

  };

  int main(){
T_sort_data<int,int,int> * a = new T_sort_data<int,int,int> ;
bool more = true;
    string answ;

a->set_date();
//cin >> a; (this doesn't work)
    //validator goes here

//a += a; (this, again, doesn't work)

delete a;

return 0;
  }

每当我使用“T_sort_data a;”制作对象时 这些操作工作正常,但每当我使用“T_sort_data * a = new T_sort_data;” 狗屎击中风扇。

谁能帮我这个?

4

2 回答 2

2

你没有准确地发布出了什么问题,所以我必须从代​​码中推断出来。

您遇到的问题是重载运算符适用于实例或对象引用,而不是对象指针。在您的代码不起作用的情况下,您正在处理指向对象的指针。因此,为了使用重载运算符,您需要在应用运算符之前取消引用指针(有效地将其从指向值的指针转换为值本身),例如:

cin >> *a;

或者

*a += *a;
于 2013-06-08T16:32:09.153 回答
1

T_sort_data a是一个类型的变量T_sort_data

T_sort_data * a是指向 的类型指针的变量T_sort_data

您的重载运算符希望它们的操作数是类型T_sort_data,而不是指针T_sort_data。使用一元运算*符取消引用指针,以便操作数类型是运算符所期望的。

这是非常基本的。int这里和和是一样的std::couthttp ://codepad.org/N07Xckdy

于 2013-06-08T16:35:56.347 回答