首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

,类嵌套,不可以用const修饰

2013-11-25 
求助,类嵌套,不可以用const修饰练习模版类时候,发现一个问题,很是疑惑写了一个嵌套的类,同样是重载操作符,

求助,类嵌套,不可以用const修饰
练习模版类时候,发现一个问题,很是疑惑
写了一个嵌套的类,同样是重载操作符,在嵌套的类中使用,若加上const,就会编译错误,不加不错.
错误信息:
passing 'const myvector<10, int>' as 'this' argument of 'Type& myvector<n, Type>::operator[](int) [with int n = 10, Type = int]' discards qualifiers|
||=== 已完成构建: 1 个错误, 0 个警告 ===|

template<int n,class Type=int> 
class myvector                 
{
private:
    Type te[n];
public:
    myvector()
    {
        for(int i=0;i<n;i++) te[i]=i+1;
    }
    Type &operator [](int in)
    {
        if(in>-1&&in<n) 
            return te[in];
        else
            return te[n-1];
    }
    void show() const//此处可以加上
    {
        for(int i=0;i<n;i++)
            cout<<te[i]<<" ";
        return;
    }
};
template<class T1,int n> 
class mycontainvector 
{
private:
    myvector<n,T1> v1;
public:
    void show() //加上const编译错误
    {
        for(int i=0;i<n;i++) cout<<v1[i]<<" ";
        return;
    }
};

谢谢大家
[解决办法]
这是因为你的myvector没有重载operator[] const
[解决办法]
Type &operator [](int in)//修改成下面这种
const Type &operator [](int in)const
因为你下面的类的show如果是const成员函数,那么就不能修改成员函数,也就是说你的成员会转为const。
但是Type &operator [](int in)这句却返回了一个普通的成员,而非const,所以就冲突了。
const Type &operator [](int in)改成这种也是有问题的,因为const对象只能调用const成员函数,编译器不信任人为的保证(就是函数里的确没有修改),只相信强制的保证。所以必须是const Type &operator [](int in)const

至于const的文章我找找看。

热点排行