C++ 错误 : Passing 'const' as 'this' array

标签 c++ arrays dynamic-memory-allocation

Dev C++ 下编译时,我正在传递 'const Array' 作为 'int& Array::operator[](int)' 的 'this' 参数丢弃限定符 .如果我在 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<<"constructor\n";
                       m_size = sz;
                       m_ptr = new int[sz];
             }
             ~Array()
             {
                     cout<<"Delete\n";
                     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)

只有出现在类声明之外的函数定义才需要类作用域限定符。

关于C++ 错误 : Passing 'const' as 'this' array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33527805/

相关文章:

c# - 如何使用 DirectShow 过滤器将图像序列转换为视频?

arrays - 修改大型元胞数组以在 MATLAB 中查找满足条件的某些行

javascript - 将 JSON 响应添加到数组时出错

CUDA新建删除

c++ - 将节点数组(可变长度)转换为 const float** 以调用 opencv.calcHist

c++ - 反转数组时遇到问题

c++ - 无条件地从构造函数中抛出 *this

java - 在 Java 中对数组进行排序

c++ - C++中的内存分配和继承类

c - 使用 realloc 缩小数组,丢失第一个元素