不能将变量用于我的数组大小,但变量被声明为const Int

时间:2013-03-03 19:54:46

标签: c++ visual-studio-2012

所以我遇到的问题是无法创建一个可变大小的新数组(该变量被声明为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);
}

2 个答案:

答案 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。这样做,它会工作。