我有错误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; - 删除了*
答案 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);
是错误的,但如果这一行给出了实际的错误信息,那就有点令人惊讶了。
你似乎对数组和指针非常混淆。在上面的copy
和delete [] &arrayIntPtr;
行中,两种情况都应该是*arrayIntPtr
,或者等同于arrayIntPtr[0]
。
我不清楚为什么你首先拥有:int *arrayIntPtr[1];
。这是一个包含1个元素的数组。该元素是指向int
的指针。事实上,你只是在你使用它的任何地方访问它的第一个元素,所以只有int *arrayIntPtr;
就更简单了。
(实际上使用vector
代替这个指针会更简单但是我假设你这样做是为了学习指针的使用。)