向量/数组问题,不能给变量赋索引/不能使用变量作为数组大小(索引)c++

Vector/Array problems, cannot assign index to variable/cannot use variable as the array size(indexes) C++

本文关键字:变量 不能 索引 数组 c++ 向量 问题      更新时间:2023-10-16

好的,所以我试图通过这个转换函数将整数转换为二进制,但我在其中使用数组/矢量时遇到了一些麻烦。我以前有这个工作使用数组,但我开始得到错误。我把数组(注释掉),我原来使用下面的向量,我现在使用。我换成了矢量,因为从我所做的研究来看,它似乎会更好。

我在for循环中得到tempArray[i] = remainder;错误。

错误提示:

错误2:binary '=':没有找到右操作数为'int'的操作符(或者没有可接受的转换)'

我读了一些关于重载的东西,但不知道那是什么。

当我做一个数组时,我得到了数字int tempArray[digits];上的这三个错误,我把它作为索引(对于数组,只是注释掉向量并使用已经注释掉的数组):

错误1错误C2057:期望的常量表达式

错误2:不能分配一个常量大小为0的数组

错误3错误C2133: 'tempArray':未知大小

最后,我刚刚从使用Sublime Text 3和Cygwin作为我的编译器切换到使用Visual studio,所以我不知道这是否可能与它有关。

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上得到一个错误。返回一个向量的正确方法是什么?

std::vector<int>* tempArray = new std::vector<int>[digits];

正在创建一个大小为0的向量数组。这不是你想做的。改为

std::vector<int> tempArray(digits);

这将创建一个名为tempArray的向量,其元素数量为digits

上面已经解释了向量错误,但没有解释数组解决方案。数组分配的错误是可变长度数组在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个元素的数组。