在c ++中声明全局变量的问题?

时间:2015-11-22 16:55:36

标签: c++

我在c ++方面经验不多。在这里,我宣布两个全局变量 n和cache。这是我的代码。

#include<iostream>
using namespace std;
#include<vector>
int n;
int cache[n][n];
int find_max_profit(vector<int> &v,int l,int r)
{
if(l>r)
{
    return 0;
}
else
{
    int year=l+n-r;
    return max(find_max_profit(v,l+1,r)+year*v[l],find_max_profit(v,l,r-1)+year*v[r]);
}
}
int main()
{
    cout<<"enter the number of wines"<<endl;
cin>>n;
int i,j;
cout<<"enter the prices"<<endl;
vector<int> v;
for(i=0;i<n;i++)
{
    for(j=0;j<n;j++)
    {
        cache[i][j]=-1;
    }
}
for(i=0;i<n;i++)
{
    int num;
    cin>>num;
    v.push_back(num);
}
int max=find_max_profit(v,0,n-1);
cout<<"maximum profit is "<<max<<endl;
return 0;
}

当我编译此代码时,我收到以下错误:

||=== Build: Debug in selling wine (compiler: GNU GCC Compiler) ===|
/home/kaminey/makichut/selling wine/main.cpp|5|error: array bound is not     an integer constant before ‘]’ token|
/home/kaminey/makichut/selling wine/main.cpp|5|error: array bound is not an integer constant before ‘]’ token|
/home/kaminey/makichut/selling wine/main.cpp||In function ‘int main()’:|
/home/kaminey/makichut/selling wine/main.cpp|29|error: ‘cache’ was not   declared in this scope|
||=== Build failed: 3 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

但这应该编译,我想知道我的代码在这里出了什么问题。

5 个答案:

答案 0 :(得分:3)

您不能使用size作为输入整数声明数组。您必须依赖于可能的数组大小10,如下所示;

int cache[10][10];

否则您可以使用std::vector<>代替数组。

答案 1 :(得分:0)

你不能这样做。 编译器应该知道如何计算数组大小。

None

您可以动态分配缓存阵列。

答案 2 :(得分:0)

可能性解决方案:

cache = new int*[n];
for( int i = 0; i < n; i++ ) {
    cache[i] = new int[n];
}

std::vector< std::vector<int> > cache;
cache.resize( n, std::vector<int>( n, 0 ) );

答案 3 :(得分:0)

第一个错误是缓存(n)的数组绑定必须是Const ..或者您可以将数组设置为动态数组,如下所示..

int **cache=new int*[n];
for (int i=0;i<n;i++)
{
cache[i]=new int[n];
}

答案 4 :(得分:0)

您的变量是全局变量是一个非问题(事实上,它们的全局性与最佳实践和范围更相关,但与编译错误无关。)问题是编译器不知道你的cache在编译时有多大。

我不清楚原因背后的原因,但是当您在C ++中声明一个非动态分配的数组时,必须在编译时知道数组大小。由于您当前版本的代码需要用户输入来定义数组的大小,因此编译器在编译时不知道大小(&#34;用户是否需要n = 10?或者{{} 1}}?我不知道给n = 100}留出多少空间:&#34;)。

为了解决这个问题,我个人会尝试跟随其他用户&#39;解决方案;要么动态分配cache,要么使用cache

Here是关于数组的一些一般信息。我还引用了此链接中涉及您问题的一些相关行:

  

固定数组(也称为固定长度数组或固定大小数组)是一个在编译时已知长度的数组。

  

因为固定数组在编译时分配了内存,所以会引入两个限制:

  •   

    固定数组的长度不能基于用户输入或运行时计算的其他值。

  •   

    固定数组具有无法更改的固定长度。