C ++错误C2440:' =' :无法转换为' const int'到' int *'

时间:2014-06-10 02:41:51

标签: c++ class compiler-errors

我有错误2440,所有其他与错误相关的问题都没有帮助我。这可能是重复的,但我仍然需要你自己的代码帮助。

这是练习复制构造函数和赋值运算符;目标是将向量中的所有内容复制到数组中。

(请注意,我知道C ++)

我假设它是以下内容:

copy(other.vectorInt.begin(), other.vectorInt.end(), this->arrayIntPtr);

我唯一一次复制信息。

HEADER:

class vectorOfInt {
  private:
    std::vector<int> vectorInt;

    int *arrayIntPtr[]; 

    static const int CAPACITY = 32;


  public:


    // • A Copy constructor
inline vectorOfInt::vectorOfInt(const vectorOfInt & other){
  std::cout << "Initializing Copy constructor. " << endl;
  delete [] &arrayIntPtr;

  *arrayIntPtr = new int [other.vectorInt.size()];

  copy(other.vectorInt.begin(), other.vectorInt.end(), this->arrayIntPtr);

  //for(int i=0; i < other.vectorInt.size(); i++){
  //  this->arrayIntPtr[i] = other.vectorInt[i];
  //}
}
};

谢谢

编辑:我将数组更改为:

int* arrayIntPtr[] 

我得到:warning C4200: nonstandard extension used : zero-sized array in struct/union

如果我只是这样做:int* arrayIntPtr;

然后我不能这样做:*arrayIntPtr = new int [other.vectorInt.size()];

编辑2:

谢谢你们的帮助,我的解决方案是: int* arrayIntPtr; arrayIntPtr = new int [other.vectorInt.size()];&lt; - 删除了*

3 个答案:

答案 0 :(得分:1)

[这里是显示问题的简化代码。 ]

#include <iostream>
#include <vector>

class vectorOfInt {
    std::vector<int> vectorInt;
    int *arrayIntPtr[1];

public:
    // • A Copy constructor
    inline vectorOfInt(const vectorOfInt & other){
        std::cout << "Initializing Copy constructor. " << std::endl;
        delete[] & arrayIntPtr;

        *arrayIntPtr = new int[other.vectorInt.size()];

        copy(other.vectorInt.begin(), other.vectorInt.end(), this->arrayIntPtr);
    }
};

修复方法是让arrrayIntPtr属于int*类型,更正要匹配的其他语法。我不知道你在哪里得到那个奇怪的delete代码。

class vectorOfInt {
    std::vector<int> vectorInt;
    int* arrayIntPtr;

public:
    // • A Copy constructor
    inline vectorOfInt(const vectorOfInt & other){
        std::cout << "Initializing Copy constructor. " << std::endl;
        delete[] arrayIntPtr;

        arrayIntPtr = new int[other.vectorInt.size()];

        copy(other.vectorInt.begin(), other.vectorInt.end(), this->arrayIntPtr);
    }
};

(而且你所做的一切都比你需要的更难。首先使用std::vector熟练,然后尝试做这样的事情。)

答案 1 :(得分:1)

您正确,问题出在copy电话中。最后一个参数必须是您要复制的相同类型的迭代器,即int。一个指针作为迭代器工作正常,但在这种情况下,因为你在声明上放了[1],你有一个指向int数组,而不是单一,即使阵列只有一个空间。

答案 2 :(得分:0)

您发布的错误消息似乎与您的代码对应:

//  this->arrayIntPtr[i] = other.vectorInt[i];

或者如果该行没有被注释掉的话。这一行:

copy(other.vectorInt.begin(), other.vectorInt.end(), this->arrayIntPtr);

是错误的,但如果这一行给出了实际的错误信息,那就有点令人惊讶了。

你似乎对数组和指针非常混淆。在上面的copydelete [] &arrayIntPtr;行中,两种情况都应该是*arrayIntPtr,或者等同于arrayIntPtr[0]

我不清楚为什么你首先拥有:int *arrayIntPtr[1];。这是一个包含1个元素的数组。该元素是指向int的指针。事实上,你只是在你使用它的任何地方访问它的第一个元素,所以只有int *arrayIntPtr;就更简单了。

(实际上使用vector代替这个指针会更简单但是我假设你这样做是为了学习指针的使用。)