所以我遇到的问题是无法创建一个可变大小的新数组(该变量被声明为const int)
编辑:我应该提到项目的目标是仅使用数组对象。我认为规则有点愚蠢,但是感谢你们到目前为止所有的帮助。
编辑:我尝试将其作为常量但仍然没有运气(同样的错误)
const int fin = const_cast<const int&>(newArraySize);
int deduped[fin]; //Here is the error
这是我遇到麻烦的地方 -
const int fin = newArraySize;
int deduped[fin];
我得到的错误是“错误:表达式必须具有常量值”
非常感谢任何帮助!
这是我的其余代码,用于从用户定义的数组中取出重复项目 -
#include <iostream>
#include <string>
using namespace std;
int i=0, num, dupNum = 0, newArraySize = 19, k = 0;
int duper[19];
int main ()
{
cout << "Hello and welcome to the DAM (Duplicates in Array Manager)\nMake sure to use integer values from 10 to 110 (inclusive)\n";
for (i; i=20; i++)
{
cout << "Enter value " << i << ":";
cin >> num;
cin.ignore();
verifyData(num);
duper[i-1] = num;
cout << "\n";
}
for (i = 0; i=20; i++) //This for look assigns all values in array that exist more than once to 0
{
dupNum = 0;
for (int n = 0; n=20; n++)
{
if (duper[i] == duper[n])
dupNum++;
}
if (dupNum > 1)
{
duper[i]=0;
newArraySize--; //Makes the size of the new array one smaller for every duplicate
}
}
const int fin = newArraySize;
int deduped[fin]; //Here is the error
for (i = 0; i=20; i++) //This is where I create the array wothout duplicates
{
if (duper[i] != 0)
{
deduped[k] = duper[i];
k++;
}
}
for (i = 0; i=fin+1; i++) //Displays array values with spaces
cout << deduped[i] << " ";
cout << "\n\nThank you for using DAM!" << endl; //end
return 0;
}
void verifyData(int temp)
{
if (10 > temp > 110)
{
cout << "\nSorry, but the DAM only accepts integer values from 10 to 110 (inclusive).\n\nPlease try again\nEnter value "
<< i << ":";
cin >> num;
cin.ignore();
}
}
void verifyData(string temp) //Overload for wrong user input
{
cout << "\nSorry, but the DAM only accepts integer values from 10 to 110 (inclusive).\n\nPlease try again\nEnter value "
<< i << ":";
cin >> i;
cin.ignore();
verifyData(num);
}
void verifyData(double temp) //Overload for wrong user input
{
cout << "\nSorry, but the DAM only accepts integer values from 10 to 110 (inclusive).\n\nPlease try again\nEnter value "
<< i << ":";
cin >> i;
cin.ignore();
verifyData(num);
}
答案 0 :(得分:2)
C ++有(令人困惑的)两种形式的const
。您的fin
是一种类型,但其他类型是数组大小所必需的。另一种类型新称为“constexpr”,并使用t为“编译时常量”。你看,所有数组都必须是C ++中编译器已知的固定大小。因此,创建变量const
是不够的,编译器也必须能够找出值。所以newArraySize
必须是编译时常量表达式,或者更可能的是,你必须使用动态数组,最好由std::vector
管理。
std::vector<int> deduped(newArraySize);
如果你不能使用vector
,还有其他(更糟)的选项:std::unique_ptr<int[]>
,管理,动态记忆你自己int* deduped=new[newArraySize]();
和delete deduped;
,或制作一个具有编译时常量最大大小(1000)的本地数组,并分别跟踪您实际使用的元素数。
答案 1 :(得分:0)
newArraySize
未声明为const。这样做,它会工作。