2015-02-08 49 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; 
} 
相关问题