c++;属于非类类型错误的 首先,我要记住C++是一个完整的新手。今天我读了很多关于模板和字符串的书,但有几件事我想不出来。当我在测试类中使用point或任何其他值创建点时。我有一个错误:“v2”中的成员“tostring”请求为非类类型。。。 1.为什么我会犯这样的错误? 2.如何使Point()=默认值;使每个坐标值为0.0;就像我有一个点,它应该是(0.0),点应该是(0.0,0.0),依此类推: #ifndef POINT_H #define POINT_H #include <iostream> #include <list> #include <sstream> #include <string> using std::stringstream; #include <cmath> using namespace std; template<unsigned short n> class Point { public: list <float> coords = {0.0}; Point <n>() = default; Point <n>(list<float> coords){ this-> coords=coords; } string toString(){ string sone; ostringstream ss; sone.append("("); auto it3= coords.begin(); while ((it3) != coords.end()){ ss << (*it3); sone.append(ss.str()); ss.str(""); } sone.append(")"); return sone; } float distanceFrom (Point <n> v){ float s=0; list<float> coords; auto it1= coords.begin(); auto it2= v.coords.begin(); while ((it1) != coords.end()){ s+=(*it1 -*it2)*(*it1-*it2); it1++; it2++; } return sqrt(s); } friend std::ostream& operator <<(std::ostream& out, const Point<n>& v) { out << "("<<"Test"<<")"; return out; } }; #endif #如果不确定点(H) #定义点 #包括 #包括 #包括 #包括 使用std::stringstream; #包括 使用名称空间std; 模板 类点{ 公众: 列表坐标={0.0}; 点()=默认值; 点(列表坐标){ 这->坐标=坐标; } 字符串toString(){ 弦声; ostringstream ss; 一、追加(“”); auto it3=coords.begin(); while((it3)!=coords.end()){ ss
方法toString中的增量迭代器,它可以工作:c++;属于非类类型错误的 首先,我要记住C++是一个完整的新手。今天我读了很多关于模板和字符串的书,但有几件事我想不出来。当我在测试类中使用point或任何其他值创建点时。我有一个错误:“v2”中的成员“tostring”请求为非类类型。。。 1.为什么我会犯这样的错误? 2.如何使Point()=默认值;使每个坐标值为0.0;就像我有一个点,它应该是(0.0),点应该是(0.0,0.0),依此类推: #ifndef POINT_H #define POINT_H #include <iostream> #include <list> #include <sstream> #include <string> using std::stringstream; #include <cmath> using namespace std; template<unsigned short n> class Point { public: list <float> coords = {0.0}; Point <n>() = default; Point <n>(list<float> coords){ this-> coords=coords; } string toString(){ string sone; ostringstream ss; sone.append("("); auto it3= coords.begin(); while ((it3) != coords.end()){ ss << (*it3); sone.append(ss.str()); ss.str(""); } sone.append(")"); return sone; } float distanceFrom (Point <n> v){ float s=0; list<float> coords; auto it1= coords.begin(); auto it2= v.coords.begin(); while ((it1) != coords.end()){ s+=(*it1 -*it2)*(*it1-*it2); it1++; it2++; } return sqrt(s); } friend std::ostream& operator <<(std::ostream& out, const Point<n>& v) { out << "("<<"Test"<<")"; return out; } }; #endif #如果不确定点(H) #定义点 #包括 #包括 #包括 #包括 使用std::stringstream; #包括 使用名称空间std; 模板 类点{ 公众: 列表坐标={0.0}; 点()=默认值; 点(列表坐标){ 这->坐标=坐标; } 字符串toString(){ 弦声; ostringstream ss; 一、追加(“”); auto it3=coords.begin(); while((it3)!=coords.end()){ ss,c++,C++,方法toString中的增量迭代器,它可以工作: string toString(){ string sone; ostringstream ss; sone.append("("); auto it3= coords.begin(); while ((it3) != coords.end()){ ss << (*it3);
string toString(){
string sone;
ostringstream ss;
sone.append("(");
auto it3= coords.begin();
while ((it3) != coords.end()){
ss << (*it3);
sone.append(ss.str());
ss.str("");
++it3;
^^^
}
sone.append(")");
return sone;
}
要打印点,您必须使用
toString
方法const
:
string toString() const { //... }
启用对常量点的调用。现在您可以在
运算符中使用它。这段代码对我来说编译得很好。但是如果您创建一个点:点v3{list{2.0,3.0};并尝试使用:cout@user3328230,在类内部,您不需要说点
,只需要说点
。除此之外,请不要将using指令或声明放在头中。@chris…至少要指定构造函数方法…@πάνταῥεῖ, 以及类定义中的任何其他地方。您唯一需要指定它的时间是当n
与当前实例的n
不相同时。这很正确,但不是问题中的错误,这是一个编译器错误,可能与问题中显示的内容无关。它与什么有关?我应该复制测试程序的代码或?我如何在friend std::ostream&operator@user3328230中使用toString?你的意思是将坐标写入cout吗?注意:这返回ostream&而不是Point如果我说cout
string toString() const { //... }
friend std::ostream& operator <<(std::ostream& out, const Point<n>& v) {
out << v.toString();
return out;
}