关于类成员函数中形参的const问题

C++语言 码拜 9年前 (2015-05-11) 995次浏览 0个评论
 

为什么我的拷贝构造函数形参加了个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说的是错误的!

希望你把错误提示发出来!

引用 2 楼 jianwen0529 的回复:

不好意思,1L说的是错误的!

希望你把错误提示发出来!

d:\练习用\模版数组类\模版数组类\myvector.cpp(16): error C2678: 二进制“[”: 没有找到接受“const MyVector<T>”类型的左操作数的运算符(或没有可接受的转换)
1>          with
1>          [
1>              T=int
1>          ]
1>          d:\练习用\模版数组类\模版数组类\myvector.h(15): 可能是“int &MyVector<T>::operator [](int)”
1>          with
1>          [
1>              T=int
1>          ]
1>          尝试匹配参数列表“(const MyVector<T>, int)”时
1>          with
1>          [
1>              T=int
1>          ]
1>          d:\练习用\模版数组类\模版数组类\myvector.cpp(11): 编译类 模板 成员函数“MyVector<T>::MyVector(const MyVector<T> &)”时
1>          with
1>          [
1>              T=int
1>          ]
1>          d:\练习用\模版数组类\模版数组类\myvector测试.cpp(18): 参见对正在编译的函数 模板 实例化“MyVector<T>::MyVector(const MyVector<T> &)”的引用
1>          with
1>          [
1>              T=int
1>          ]
1>          d:\练习用\模版数组类\模版数组类\myvector测试.cpp(12): 参见对正在编译的类 模板 实例化“MyVector<T>”的引用
1>          with
1>          [
1>              T=int
1>          ]

报错的信息。可是我写普通的类的拷贝构造函数时,加上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 []
应该是这个重载有问题, 把这部分代码贴出来看看吧.
引用 6 楼 iyomumx 的回复:

你需要重载一个const版的operator[]

大哥的确一语中的,,拷贝构造函数里使用了[]操作符,由于传进来的参数是const,但并没const的[]版本,,所以才出错,感谢指点。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于类成员函数中形参的const问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!