[英]Issue with declaring global variable in c++?
我在 C++ 方面沒有那么多經驗。 我在這里聲明了兩個全局變量 n 和緩存。這是我的相同代碼。
#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)) ===|
但這應該被編譯,我想知道我的代碼有什么問題。
您不能使用大小作為輸入整數來聲明數組。 要么你必須依賴可能的數組大小 10,如下所示;
int cache[10][10];
否則你可以使用std::vector<>
代替數組。
你不能這樣做。 編譯器應該知道如何計算數組大小。
int n;
int cache[n][n];
您可以動態分配緩存數組。
可能的解決方案:
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 ) );
第一個錯誤是緩存 (n) 的數組邊界必須是 Const .. 或者你可以像這樣將數組設為動態數組。
int **cache=new int*[n];
for (int i=0;i<n;i++)
{
cache[i]=new int[n];
}
您的變量是全局的,這不是問題(它們是全局的這一事實與最佳實踐和范圍更相關,但與您的編譯錯誤無關。)相反,問題是編譯器不知道有多大您的cache
在編譯時。
我不是很清楚背后的原因,但是當您在 C++ 中聲明一個不是動態分配的數組時,必須在編譯時知道數組大小。 由於您當前版本的代碼需要用戶輸入來定義數組的大小,因此編譯器在編譯時不知道大小(“用戶是否想要n = 10
?或者n = 100
?我不知道知道有多少空間給cache
]:")。
為了解決這個問題,我個人會嘗試遵循其他用戶的解決方案; 要么動態分配cache
,要么使用std::vector
。
以下是有關數組的一些一般信息。 我還引用了此鏈接中涉及您的問題的一些相關行:
固定數組(也稱為固定長度數組或固定大小數組)是長度在編譯時已知的數組。
和
由於固定數組在編譯時分配了內存,因此引入了兩個限制:
固定數組的長度不能基於用戶輸入或運行時計算的其他值。
固定數組具有固定長度,無法更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.