2013-05-14 119 views
0

我使用不同的函數在C++中進行編程。我在聲明和使用本地和全局變量時遇到了問題。首先必須在main中使用許多變量,並且還需要在函數中使用它們。C++全局變量和函數

因此,我宣佈了一些全局變量。我也想分配一些main()以外的內存。

但是現在代碼似乎不起作用。請幫我解決這個問題。

我:

int *mb = new int [c]; //declare variables before you use them 
matrix *M = new matrix [n+1+m]; 

當我使用上面的兩個變量爲全局變量,然後我的代碼不能正常工作。

這裏是我的代碼的一部分:

int p=4, n=5, m=5; 
int num; 
struct matrix{ 
public: 
int row; 
int col; 
int val; 
}; 

int P(int k){ 
return k-1; 
} 

void M_to_C(){ 

int *mb,*mc,*mi; 
double *mv; 
int i, cur_col; 
matrix*M; 
cur_col=-1; 
for(i=0; i<= num; i++) { 
    cur_col=M[i].col; 
    mb[cur_col]=i; 
    mc[cur_col]=1; 
    mi[i]=M[i].row; 
    mv[i]=M[i].val; 
}} 

int main (int argc, char **argv){ 
int status = 0; 

int project = 4; 
int employee = 5; 
int time = 5; 

int empl [] = {2, 2, 2, 3}; 
int meet [] = {2, 4, 3, 3}; 

int NUMCOLS=n+m; 

double *lb = new double [NUMCOLS]; 
double *ub = new double [NUMCOLS]; 
double *x = new double [NUMCOLS]; 
int *mb= new int [NUMCOLS]; 
int *mc= new int [NUMCOLS]; 
char *ctype = new char [NUMCOLS]; 

int **F = new int*[employee]; 
for(int a = 1; a <= employee; a++){  
    F[a] = new int [time]; 
    for(int b = 1; b <= time; b++){ 
     F[a][b]=rand()%2; 
    }} 

int NUMROWS=0; 

for(int i=1; i<=n; i++){   
    for(int j=1; j<=m; j++){ 
     for(int l=1; l<=p; l++) { 
      if(F[i][j] ==0){    
       NUMROWS++; 
            num++; 
      } 
     } 
    } 
} 

int *mi= new int [2*NUMROWS+m]; 
double *mv= new double [2*NUMROWS+m]; 
matrix_entry *M = new matrix_entry [num+1+m]; 

num=-1; 
int row=-1; 
for(int i=1; i <= n; i++) { 
    for(int j=1; j <= m; j++) { 
     for(int k=1; k <= project; k++) { 
      if(F[i][j] ==0) { 
       row++; 
       num++; 
       M[num].col=P(k); 
       M[num].row=row; 
       M[num].val=-1; 
      }}}} 

M_to_C(); 
+3

此代碼是不可讀的混亂。我建議你花時間閱讀[C++書](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list),並學習適當的編碼風格和方法在不使用全局變量的情況下做你想做的事情。 – 2013-05-14 08:49:08

回答

3

您可以將它們定義爲全局和main填充他們這樣的:

int *mb; 
matrix *M; 

int main() { 
    mb = new int [c]; 
    M = new matrix [n+1+m]; 
    : 
} 

但我要提醒你,全局變量(和短變量名稱如mb,lbub)通常被認爲是一個壞主意。

如果需要,您可以將它們放在課程中或將它們作爲參考傳遞給它們,以限制它們的可訪問性。

1

裏面你做未初始化指針M一些操作M_to_C()功能,所以基本上這是不確定的行爲:

matrix*M; 
cur_col=-1; 
for(i=0; i<= num; i++) { 
    cur_col=M[i].col; // access local uninitialized pointer M 

爲了解決它使用它之前,你應該初始化中號屬性。在你的情況下,局部變量M隱藏全局變量。我提議到M進入M_to_C()功能,因此,它會存在的對象進行操作:

void M_to_C(matrix * M)