C++错误:将"const"作为"this"数组传递
C++ error: Passing 'const' as 'this' array
在Dev C++
下编译时得到passing 'const Array' as 'this' argument of 'int& Array::operator[](int)' discards qualifiers
。如果我在cygwin
上使用gcc
编译,我会收到一些这种类型的错误消息:
error: extra qualification ‘Array::’ on member ‘Array’ [-fpermissive]
你能告诉我这个错误的原因是什么吗?我在这个代码上花了很多时间,但仍然无法使它正常工作。
#include<iostream>
using namespace std;
class Array
{
int *m_ptr;
int m_size;
public:
Array(int sz)
{
cout<<"constructorn";
m_size = sz;
m_ptr = new int[sz];
}
~Array()
{
cout<<"Deleten";
delete[] m_ptr;
}
int& operator[] (int j)
{
cout<<"Operation []n";
return m_ptr[j];
}
void Array::copy(const Array& ar)
{
m_size = ar.m_size;
m_ptr = new int[m_size];
int *ptr = ar.m_ptr;
int j;
for(j = 0;j < m_size; j++)
m_ptr[j] = ptr[j];
}
Array::Array(const Array& ar)
{
copy(ar);
}
void Array::print(const Array& ar)
{
int i;
int len = ar.m_size;
for(i = 0;i < len;i++)
cout<<ar[i]<<" ";
cout<<endl;
}
};
int main()
{
Array a1(10);
Array a2(5);
int i;
for(i = 0;i < 10;i++)
{
a1[i] = 1;
if(i < 5) a2[i] = 2;
}
print(a1);
return 0;
}
此外,我正在读的书也有功能
Array& operator= (const Array& ar)
{
delete m_ptr;
copy(ar);
return *this;
}
我不明白为什么我们需要使用这个功能。
只需更改
void Array::copy(const Array& ar)
至
void copy(const Array& ar)
只有出现在类声明之外的函数定义才需要类作用域限定符。
问题1
中不需要Array::
void Array::copy(const Array& ar) { ... }
当函数在类定义中定义时。它可以简单地是
void copy(const Array& ar) { ... }
只有当函数在类定义之外定义时,才需要Array::
部分。
第2期
在print
中,您有一行:
cout<<ar[i]<<" ";
由于ar
是const
对象,而operator[]()
函数不是const
成员函数,编译器不喜欢它。您应该提供operator[]
函数的两个重载——一个用于const
对象,另一个用于非const
对象。
int& operator[] (int j)
{
return m_ptr[j];
}
int operator[] (int j) const
{
return m_ptr[j];
}
然后,您可以使用数组运算符访问const
对象的元素,也可以访问和修改非const
对象的元素。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '