2015-02-08 58 views
-3
bool potezn(int x,int y,int k,char c,char ram1[][100],bool segfault,int n,int m) 
{ 
    segfault=true; 
    if(c=='U' && x>=k){x=x-k;segfault=false;} 
    if(c=='D' && x+k<n){x=x+k;segfault=false;} 
    if(c=='L' && y>=k){y=y-k;segfault=false;} 
    if(c=='R' && y+k<m){y=y+k;segfault=false;} 
    if(ram1[x][y]=='.')ram1[x][y]='N';//zauzima polozaj ukoliko moze 
    return segfault; 
} 

segfault=potezn(x,y,q,c,ram,segfault,n,m); 

這是我的代碼,當我運行它,我不斷收到錯誤我不能使用字符函數

d:\ dev的\開發-CPP \ segfault2.cpp

不能轉換char (*)[((unsigned int)((int)m))]char (*)[100]的說法5bool potezn(int, int, int, char, char (*)[100], bool, int, int)

請幫助, 在此先感謝

+6

如何'ram'聲明?看起來你正在嘗試傳遞一個可變長度數組(VLA)作爲參數,該參數需要一個固定長度的常規數組。還要注意,VLA不是有效的C++;它們是GCC在C++中作爲擴展支持的僅支持C的功能。 – 2015-02-08 21:52:27

+0

在使用C++時,嘗試將ram1更改爲'std :: vector',否則使用'char **'。 – Raito 2015-02-08 21:54:47

回答

0

你得到那個編譯錯誤的原因是因爲你試圖調用函數poteznram的類型不是potezn類型的要求。

仔細看ram

其類型必須是char*[100]而不是char(*)[((unsigned int)((int)m)]]

您可以聲明ram的長度明確,或更改char ram1[][100]char * ram1.
(還要考慮使用std::vector.std::vector是自動地管理它的長度爲你的數組。)

void Foo(char ram[][100]); 
void Bar(char * ram); // Treat the ram as one long chunk array. 

int main() 
{ 
    char ram[5][100]; 
    char ram_error[5][5]; 

    Foo(ram); // Ok. 
    Foo(ram_error); // Error. 

    Bar(reinterpret_cast<char *>(ram_error)); // Ok. Not recommended. 

    return 0; 
} 
相關問題