我在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)) ===|
但这应该编译,我想知道我的代码在这里出了什么问题。
答案 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是关于数组的一些一般信息。我还引用了此链接中涉及您问题的一些相关行:
固定数组(也称为固定长度数组或固定大小数组)是一个在编译时已知长度的数组。
和
因为固定数组在编译时分配了内存,所以会引入两个限制:
固定数组的长度不能基于用户输入或运行时计算的其他值。
固定数组具有无法更改的固定长度。