向量/数组问题,不能给变量赋索引/不能使用变量作为数组大小(索引)c++
Vector/Array problems, cannot assign index to variable/cannot use variable as the array size(indexes) C++
好的,所以我试图通过这个转换函数将整数转换为二进制,但我在其中使用数组/矢量时遇到了一些麻烦。我以前有这个工作使用数组,但我开始得到错误。我把数组(注释掉),我原来使用下面的向量,我现在使用。我换成了矢量,因为从我所做的研究来看,它似乎会更好。
我在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个元素的数组。
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- 表达式必须具有常数值,变量不能用作定义数组大小的常数
- 变量不能明确
- 流变量不能出现在 OpenMP 第一私有中?
- 为什么 UInt64 变量不能包含大于 UInt32::Max 的值?
- 变量不能在 lambda 中隐式捕获,并且没有使用 switch 语句指定捕获默认值
- 什么形式上保证了非原子变量不能看到凭空出现的值,并像理论上原子一样创造数据竞赛?
- 为什么可以将Char指针变量初始化为字符串,而INT指针变量不能初始化到整数数组
- clang vs gcc CRTP:constexpr 变量不能有非文字类型
- 为什么这些变量不能移动?
- 为什么我的基类指针变量不能访问派生类中的函数?
- 变量不能出现在常量表达式中
- 哪些临时变量不能在 c++11 中使用“someType()”初始化
- 为什么除了直接赋值0之外,bool变量不能设置为0
- 常量变量不能是引用的模板参数,但非常量可以
- WARN:变量不能绑定(它要么不存在,要么已经被优化掉了)
- 整型变量不能存储大的值
- 变量不能在没有指定capture-default的lambda中隐式捕获
- 变量不能产生正确的数据