簡體   English   中英

在 C++ 中聲明全局變量的問題?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM