2011-03-13 79 views
0

得到这个错误:C++操作员错误

C:\码块\库尔\ praks3 \ vector.h | 62 |错误:使 'const的矢量< 2U>' 为 '这个' 的“参数的std :: string的Vector :: toString()[带短符号的无符号整数n = 2u]'丢弃限定符|

与此代码:

#include <iostream> 
#include <vector> 
#include <cmath> 
#include <string> 
#include <sstream> 

template <unsigned short n> 
class Vector { 
    public: 
     std::vector<float> coords; 

     Vector(); 
     Vector(std::vector<float> crds); 


     float distanceFrom(Vector<n> v); 

     std::string toString(); 

     template <unsigned short m> 
     friend std::ostream& operator <<(std::ostream& out, const Vector<m>& v); 
}; 



    template <unsigned short n> 
std::string Vector<n>::toString() { 
    std::ostringstream oss; 

    oss << "("; 
    for(int i = 0; i < n; i++) { 
     oss << coords[i]; 
     if(i != n - 1) oss << ", "; 
    } 
    oss << ")"; 
    return oss.str(); 
} 

template <unsigned short m> 
std::ostream& operator<<(std::ostream& out, const Vector<m>& v) { 
    out << v.toString(); // ERROR HEEEERE 
    return out; 
} 
+1

恭喜。那么,你的问题是什么?上面没有看到一个问号。 – AnT 2011-03-13 17:44:39

回答

4

充分利用toString方法const

std::string toString() const; 

template <unsigned short n> 
std::string Vector<n>::toString() const{...} 

那是因为你在operator<<添加const预选赛到Vector。只允许您拨打const限定对象const的合格方法。

0

如果您有const Foo,则只能调用const上的成员函数。所以声明为std::string toString() const

1

这是因为你的vector被声明为const,而你的toString运算符不是const方法。 因此,在const时刻禁止调用此方法。 如果在将其转换为字符串时未编辑矢量,则应将其声明为const方法:

std::string toString() const;