我有一个模板类Polinom,它使用通用的数据类型(int,float,double,类Complex(由我定义)),我想使用此函数读取字符串并将其转换为Polinom,并构造一个构造函数:
Polion.cpp
template<typename T>
istream& operator>>(istream& in, Polinom<T>& P) {
char line[1000];
in.getline(line, 1000);
int gr = -1;
T cf[100];
char* pt;
pt = strtok(linie, " ");
while (pt) {
cf[++gr] = T(pt);
pt = strtok(NULL, " ");
}
P = Polinom<T>(gr, cf);
return in;
}
Complex.cpp
Complex::Complex(const char* str){
/*
...
*/
}
当我使用复杂数据类型时,一切都很好(Polinom a(12,4);std :: cout << a << endl;)//我为此行定义了一个好友ostream函数;)因为我写了这个构造函数Complex :: Complex(const char * str)
当我使用原始数据类型时出现问题
Polinom<int> a(12, 4); because of T(const char* ) ===> int(const char*)
我该如何解决?非常感谢!
这似乎是您在重新发明轮子。 operator>>
已经有适当的int
。您应该为Complex
添加一个重载,以便每个in >> cf[gr++]
都会编译T
。
我这样更新了代码: