2013-05-10 123 views
-2

我使用C語言,我需要編寫具有不同功能的程序。 我有一些問題,並沒有找到解決辦法。C語言函數錯誤

我有2種功能。 這一個

int X(int i, int k){ 
     int p, n; 
    return p + (i-1)*(n-1) + (k-1); 
} 

在這個函數中,我有以下錯誤:錯誤C2601: 'X':本地函數的定義是非法

另一種是

void Mode(){ 
matrix_entry temp; 
temp=M[i]; 
M[i]=M[small_i]; 
M[small_i]=temp; 

的問題是那matrix_entry,temp和M是未標識的標識符

你能幫我找到我的錯誤嗎? 感謝

+7

你知道變量的範圍嗎? – DonCallisto 2013-05-10 10:44:23

+7

此外,'新'和'公開'說它是C++,而不是C. – 2013-05-10 10:46:15

+0

看起來你有正確的位(假設這是C++而不是C),但你可能將它們粘在一起的方式是錯誤的。顯示一個完整的例子。 – Roddy 2013-05-10 10:48:01

回答

2

error C2601: 'X' : local function definitions are illegal

這聽起來像你定義另一個函數中的函數; C++不允許你這樣做。移動的X定義它目前的功能外。

另一種可能性是,馬上有另一種功能X之前,你在這個函數的最後錯過了}

The problem is that matrix_entry, temp and M are undeclared identifier But in my main I have this:

首先,類型需要在使用前聲明。聽起來這個函數出現在matrix_entry的定義之前,或者出現在不同的源文件中。

要麼將​​matrix_entry的定義移動到任何需要使用它的位置之前,要麼將其放在標題中,並將其包含在每個需要它的源文件中。這將修復matrix_entrytemp的前兩個「未聲明的標識符」錯誤。

如果Mmain,那麼它在其他功能中不可用。您可以將它傳遞給需要它的功能:

void Mode(matrix_entry * M){ 
    matrix_entry temp; 
    temp=M[i]; 
    M[i]=M[small_i]; 
    M[small_i]=temp; 
} 

int main() { 
    matrix_entry *M = new matrix_entry [10]; 

    //... 
    Mode(M); 
    //... 

    // Don't forget to delete anything you new 
    // (Better still don't new it in the first place, 
    // or use smart pointers if you must) 
    delete [] M; 
} 
+0

'模式(m);'應該'模式(M);' – 2013-05-10 11:01:00

+0

@AndrejsCainikovs:謝謝,修正了這個問題。 – 2013-05-10 11:01:46