为什么我的拷贝构造函数形参加了个const,,实际调用的时候编译不过,下面贴上代码。 template <class T> MyVector<T>::MyVector(const MyVector<T> & m)//拷贝构造函数 { mlen = m.mlen; mp = new T[mlen]; for (int i = 0; i < mlen; ++i) { mp[i] = m[i]; } } 测试案例中的调用 MyVector<int> mvi2 = mvi; 去掉const可以编译通过,,好奇怪,是编译器设置的原因吗,我看书上的例子和别人写的都是可以加const的,希望各位大哥们不吝赐教。 |
|
1分 |
MyVector<int> mvi2 = mvi;
如果mvi是const的当然这样子写是会提示编译出错的 |
1分 |
不好意思,1L说的是错误的!
希望你把错误提示发出来! |
d:\练习用\模版数组类\模版数组类\myvector.cpp(16): error C2678: 二进制“[”: 没有找到接受“const MyVector<T>”类型的左操作数的运算符(或没有可接受的转换) 报错的信息。可是我写普通的类的拷贝构造函数时,加上const并没有什么问题,但是模版类加const就不行。。。。 |
|
1分 |
从已展示的代码看,没有问题
|
1分 |
请问是什么编译器呢?
|
10分 |
你需要重载一个const版的operator[]
|
5分 |
error C2678: 二进制“[”: 没有找到接受“const MyVector<T>”类型的左操作数的运算符(或没有可接受的转换)
根据这句提示,错误之处应该在mp[i] = m[i]; 所以问题应该不是在const,应该在于MyVector<T>这个类型。如果把这个类型换做其他如int等之类应该是没问题。 至于MyVector<T>这个类型,楼上所说的可以参考一下。 |
1分 |
operator []
应该是这个重载有问题, 把这部分代码贴出来看看吧. |
大哥的确一语中的,,拷贝构造函数里使用了[]操作符,由于传进来的参数是const,但并没const的[]版本,,所以才出错,感谢指点。 |