c ++是非类型错误

时间:2014-03-23 17:35:38

标签: c++

首先要记住我是c ++的新手。我今天已经阅读了很多关于模板和字符串的内容,但我无法想出几件事情。当我在我的测试类中使用点< 2>创建一个点时或任何其他价值。我有一个错误:请求会员' tostring'在' v2'这是非类型的...... 1.为什么我会收到错误? 2.如何使Point()=默认;使每个坐标值为0.0;就像我有点< 1>它将是(0.0),点< 2>将是(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

1 个答案:

答案 0 :(得分:1)

在方法toString中增加迭代器并且它可以工作:

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;
        }

compiled example


关于模板的说明:

在课堂内你不需要说Point<n>,只需Point

Point () = default;
Point ( list<float> coords){ //...}

要打印Point,您必须toString方法const

string toString() const { //... }

启用const点的调用。现在,您可以在operator<<

中使用它
 friend std::ostream& operator <<(std::ostream& out, const Point<n>& v) {
        out << v.toString();
        return out;
 }