向量/数组问题,无法为变量赋值索引/无法使用变量作为数组大小(索引)C ++

时间:2015-09-01 14:35:20

标签: c++ arrays vector

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

我在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上收到错误。什么是返回矢量的正确方法?

2 个答案:

答案 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个元素的数组。