好的,所以我试图通过这个转换函数将整数转换为二进制,但是我在使用数组/向量时遇到了一些麻烦。我以前使用数组工作,但我开始收到错误。我把我最初使用的数组(注释掉)放在我现在使用的向量下面。我转而使用矢量,因为从我做过的研究来看,它似乎会更好。
我在for循环中的tempArray[i] = remainder;
收到错误。
错误说:
错误2错误C2679:二进制' =' :找不到哪个运算符采用类型' int'的右手操作数。 (或者没有可接受的转换)`
我读过有关重载的内容,但实际上并不知道那是什么。
当我做一个数组时,我在数字int tempArray[digits];
上得到了这三个错误,我把它作为索引(对于数组只注释向量并使用已经注释掉的数组):
错误1错误C2057:预期的常量表达式
错误2错误C2466:无法分配常量大小为0的数组
错误3错误C2133:' tempArray' :未知大小
最后,我刚刚使用Sublime Text 3和Cygwin作为我的编译器使用Visual Studios,因此我不知道这是否与它有关。
char* convert(int palindrome)
{
int remainder, digits = 0, dividend = palindrome;
while (dividend != 0)
{
dividend = dividend / 2;
digits++; //5 digits, Johns Computer
}
std::cout << "Digits: " << digits;
std::vector<int>* tempArray = new std::vector<int>[digits]; // vector
//int tempArray[digits]; using an array
dividend = palindrome;
for (int i = digits - 1; i >= 0; i--)
{
remainder = dividend % 2;
tempArray[i] = remainder;
dividend = dividend / 2;
// cout << array[i];
}
// cout << setw(3) << palindrome << " in binary is" << setw(3);
for (int j = 0; j < digits; j++)
{
// cout << array[j];
}
if (palindrome == 0)
cout << 0;
cout << endl;
//int *pDriveArray = array[digits];
//return readDrives(array, digits);
return 0;
}
int main() {
char *currDrives = convert(GetLogicalDrives());
cin.get();
return 0;
}
编辑:修复了以下帮助的问题。在转换函数结束时,我有return readDrives(tempArray, digits);
,我在tempArray上收到错误。什么是返回矢量的正确方法?
答案 0 :(得分:4)
std::vector<int>* tempArray = new std::vector<int>[digits];
正在创建0大小的向量数组。这不是你想要做的。将其更改为
std::vector<int> tempArray(digits);
这将创建一个名为tempArray
的向量,其中包含digits
个元素。
答案 1 :(得分:-1)
您的矢量错误已在上面解释过,但不是阵列解决方案。您为数组分配得到的错误是可变长度数组在C ++中是不合法的。您的数组调用int tempArray[digits];
期望在编译时分配一个常量值。由于您在编译时使用变量,因此不知道要分配什么。
相反,您应该在调用函数时分配指针并动态分配数组,如下所示:
//Declare pointer for your array.
int* tempArray = NULL;
...
//Allocate your array once digits is computed
tempArray = new int[digits];
... //do your work
//clean up the allocated memory
delete [] tempArray;
tempArray = NULL;
理想情况下,您还应检查数字为0的情况并在其中返回错误,而不是尝试分配具有0个元素的数组。