2015-11-22 40 views
-2

我沒有那麼多的C++經驗。在這裏,我聲明瞭兩個全局變量 n和cache.This是我的代碼相同。在C++中聲明全局變量的問題?

#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

是什麼'n的值'in int cache [n] [n];'? – silentboy

+0

@silentboy n是輸入。 – user2738777

+1

@ user2738777編譯時需要知道'n'的值。你不能在運行時神奇地擴展它。使用'std :: vector'或其他適當的東西。 –

回答

0

你不能這樣做。編譯器應該知道如何計算數組大小。

int n; 
int cache[n][n]; 

您可以動態分配緩存數組。

+0

好了,所以任何想法?,特別是在DP問題,我們如何創建一個表,因爲我們可以知道在運行時輸入。 – user2738777

+0

@ user2738777在dp解決方案中,您只需知道有多少個狀態。你不是嗎? – silentboy

3

您不能使用size作爲輸入整數來聲明數組。要麼你必須依靠可能的數組大小10,如下所示;

int cache[10][10]; 

否則你可以使用std::vector<>來代替數組。

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)); 
0

的第一個錯誤是綁定緩存(n)的數組必須是const ..或者你可以讓你的陣列像動態數組這..

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

的第一個錯誤是綁定緩存(n)的數組必須是const .. 或者你可以讓你的數組作爲動態數組 這樣的.. –

+1

您可以添加代碼的任何解釋的答案後,而不是註釋?評論很容易被遺漏或刪除。 –

+0

謝謝@DennisMeng –

0

這是一個非問題,你的變量是全球性的(事實上,他們是全球性的更相關到最佳實踐和範圍界定,但與編譯錯誤無關)。問題在於編譯器不知道編譯時您的cache有多大。

我不是很清楚爲什麼的原因,但是當你聲明一個不是動態分配的C++數組時,在編譯時必須知道數組大小。由於當前版本的代碼需要用戶輸入來定義數組的大小,因此編譯器在編譯時不知道大小(「用戶想要n = 10還是n = 100?我不知道有多少空間給予cache]:「)。

爲了解決這個問題,我會親自嘗試遵循其他用戶的解決方案;要麼動態分配您的cache,要麼使用std::vector

Here是關於數組的一些常規信息。我還引用了一些相關線路從這個鏈接,根據您的問題聯繫:

A fixed array (also called a fixed length array or fixed size array) is an array where the length is known at compile time.

Because fixed arrays have memory allocated at compile time, that introduces two limitations:

  • Fixed arrays cannot have a length based on either user input or some other value calculated at runtime.

  • Fixed arrays have a fixed length that can not be changed.