void Create_Rect(int Rect[][],int NUM) 

int i,j; 
for(i=0;i <NUM;i++) 
for(j=0;j <NUM;j++) 

if(j==i-1) 
Rect[i][j]=3*(i-1)+1+1; 
if(j==i) 
Rect[i][j]=3*(i-1)+2+1; 
if(j==i+1) 
Rect[i][j]=3*(i-1)+3+1; 
else 
Rect[i][j]=0; 


此函数编译时显示错误: 
F:\work\ChangeRectToArray.cpp(6) : error C2087: ' <Unknown>' : missing subscript 
F:\work\ChangeRectToArray.cpp(6) : error C2143: syntax error : missing ')' before 'constant' 
F:\work\ChangeRectToArray.cpp(6) : error C2143: syntax error : missing ';' before 'constant' 
F:\work\ChangeRectToArray.cpp(6) : fatal error C1004: unexpected end of file found 
执行 cl.exe 时出错. ChangeRectToArray.obj - 1 error(s), 0 warning(s) 
请前辈们方便时帮忙看下,我是新手,谢谢!

解决方案 »

  1.   

    参数int Rect[][]使用错误 二维数组做参数 第二个[]必须指定,  因为从实参传递来的是数组的起始地址,在内存中按数组排列规则存放(按行存放),而并不区分行和列,如果在形参中不说明列数,则系统无法决定应为多少行多少列.
    建议用指针 或者指定多少列
      

  2.   

    #include <iostream.h>
    #include <iomanip.h>#define NUM 10
    //创建一3对角矩阵,数据为1,2,3...
    void Create_Rect(int * Rect[][NUM],int NUM)
    {
    int i,j;
    for(i=0;i<NUM;i++)
    for(j=0;j<NUM;j++)
    {
    if(j==i-1)
    Rect[i][j]=3*(i-1)+1+1;
    if(j==i)
    Rect[i][j]=3*(i-1)+2+1;
    if(j==i+1)
    Rect[i][j]=3*(i-1)+3+1;
    else
    Rect[i][j]=0;
    }
    }
    void Print_Rect(int Rect[][],int NUM)
    {
    int i,j;
    for(i=0;i<NUM;i++)
    for(j=0;j<NUM;j++)
    cout<<setw(NUM)<<Rect[i][j];
        cout<<endl;
    }//Change Rect to Array
    void ChangeRectToArray(int NUM,int Rect[][],int Array[])
    {
    int i,j,k=0;
        for(i=0;i<NUM;i++)
    for(j=0;j<NUM;j++)
    if(Rect[i][j]!=0)
    {
    Array[k]=Rect[i][j];
    k++;
    }
    }
    void Print_Array(int Array[])
    {
    int i;
    for(i=0;;i++)
    while(Array[i]!=0})
    cout<<Array[i]<<"  ";

    }
    void main()
    {
    int * Rect[NUM][NUM],Array[3*NUM-2];
    Create_Rect(Rect,NUM);
    Print_Rect(Rect,NUM);
    ChangeRectToArray(NUM,Rect,Array);
    Print_Array(Array);
    cout<<endl;
    }
    这是完整程序,编译时出错:
    F:\work\ChangeRectToArray.cpp(6) : error C2143: syntax error : missing ')' before 'constant'
    F:\work\ChangeRectToArray.cpp(6) : error C2143: syntax error : missing ';' before 'constant'
    F:\work\ChangeRectToArray.cpp(6) : fatal error C1004: unexpected end of file found
    执行 cl.exe 时出错.ChangeRectToArray.obj - 1 error(s), 0 warning(s)列数我加了,但还有错,麻烦看一下,谢谢前辈!
      

  3.   

    #include <iostream.h>
    #include <iomanip.h>#define NUM 10
    //创建一3对角矩阵,数据为1,2,3...
    void Create_Rect(int * Rect[][NUM],int NUM)
    {
    int i,j;
    for(i=0;i<NUM;i++)
    for(j=0;j<NUM;j++)
    {
    if(j==i-1)
    Rect[i][j]=3*(i-1)+1+1;
    if(j==i)
    Rect[i][j]=3*(i-1)+2+1;
    if(j==i+1)
    Rect[i][j]=3*(i-1)+3+1;
    else
    Rect[i][j]=0;
    }
    }
    void Print_Rect(int Rect[][],int NUM)
    {
    int i,j;
    for(i=0;i<NUM;i++)
    for(j=0;j<NUM;j++)
    cout<<setw(NUM)<<Rect[i][j];
        cout<<endl;
    }//Change Rect to Array
    void ChangeRectToArray(int NUM,int Rect[][],int Array[])
    {
    int i,j,k=0;
        for(i=0;i<NUM;i++)
    for(j=0;j<NUM;j++)
    if(Rect[i][j]!=0)
    {
    Array[k]=Rect[i][j];
    k++;
    }
    }
    void Print_Array(int Array[])
    {
    int i;
    for(i=0;;i++)
    while(Array[i]!=0})
    cout<<Array[i]<<"  ";

    }
    void main()
    {
    int * Rect[NUM][NUM],Array[3*NUM-2];
    Create_Rect(Rect,NUM);
    Print_Rect(Rect,NUM);
    ChangeRectToArray(NUM,Rect,Array);
    Print_Array(Array);
    cout<<endl;
    }
    这是完整程序,编译时出错:
    F:\work\ChangeRectToArray.cpp(6) : error C2143: syntax error : missing ')' before 'constant'
    F:\work\ChangeRectToArray.cpp(6) : error C2143: syntax error : missing ';' before 'constant'
    F:\work\ChangeRectToArray.cpp(6) : fatal error C1004: unexpected end of file found
    执行 cl.exe 时出错.ChangeRectToArray.obj - 1 error(s), 0 warning(s)列数我加了,但还有错,麻烦看一下,谢谢前辈!
      

  4.   

    #include <iostream.h>
    #include <iomanip.h>#define NUM 10
    //创建一3对角矩阵,数据为1,2,3...
    void Create_Rect(int * Rect[][NUM],int NUM)
    {
    int i,j;
    for(i=0;i<NUM;i++)
    for(j=0;j<NUM;j++)
    {
    if(j==i-1)
    Rect[i][j]=3*(i-1)+1+1;
    if(j==i)
    Rect[i][j]=3*(i-1)+2+1;
    if(j==i+1)
    Rect[i][j]=3*(i-1)+3+1;
    else
    Rect[i][j]=0;
    }
    }
    void Print_Rect(int Rect[][],int NUM)
    {
    int i,j;
    for(i=0;i<NUM;i++)
    for(j=0;j<NUM;j++)
    cout<<setw(NUM)<<Rect[i][j];
        cout<<endl;
    }//Change Rect to Array
    void ChangeRectToArray(int NUM,int Rect[][],int Array[])
    {
    int i,j,k=0;
        for(i=0;i<NUM;i++)
    for(j=0;j<NUM;j++)
    if(Rect[i][j]!=0)
    {
    Array[k]=Rect[i][j];
    k++;
    }
    }
    void Print_Array(int Array[])
    {
    int i;
    for(i=0;;i++)
    while(Array[i]!=0})
    cout<<Array[i]<<"  ";

    }
    void main()
    {
    int * Rect[NUM][NUM],Array[3*NUM-2];
    Create_Rect(Rect,NUM);
    Print_Rect(Rect,NUM);
    ChangeRectToArray(NUM,Rect,Array);
    Print_Array(Array);
    cout<<endl;
    }
    这是完整程序,编译时出错:
    F:\work\ChangeRectToArray.cpp(6) : error C2143: syntax error : missing ')' before 'constant'
    F:\work\ChangeRectToArray.cpp(6) : error C2143: syntax error : missing ';' before 'constant'
    F:\work\ChangeRectToArray.cpp(6) : fatal error C1004: unexpected end of file found
    执行 cl.exe 时出错.ChangeRectToArray.obj - 1 error(s), 0 warning(s)列数我加了,但还有错,麻烦看一下,谢谢前辈!
      

  5.   

    Create_Rect()传入的第二个变量名字不能为NUM,否则会被替换成3.