所以它是这样的:
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;”时 屎袭击了粉丝。
任何人都可以帮我吗?
答案 0 :(得分:2)
你没有准确发布出错的地方所以我必须从代码中推断出来。
您遇到的问题是重载的运算符处理实例或对象的引用,而不是指向对象的指针。在您的代码不起作用的情况下,您正在处理对象的指针。因此,为了使用重载运算符,您需要在应用运算符之前取消引用指针(有效地将其从指向值的指针转换为值本身),例如:
cin >> *a;
或
*a += *a;
答案 1 :(得分:1)
T_sort_data a
是T_sort_data
类型的变量。
T_sort_data * a
是指向T_sort_data
的类型指针的变量。
您的重载运算符期望其操作数的类型为T_sort_data
,而不是指向T_sort_data
的指针。使用一元*
运算符来取消引用指针,以便操作数类型是运算符所期望的类型。
这是非常基础的。 int
和std::cout
:http://codepad.org/N07Xckdy