2012-11-22 96 views
1

你能告訴爲什麼視覺工作室編譯這段代碼(在郵件的末尾)就好了,但G ++給我一個錯誤:G ++ VS Visual Studio中

chapter8_1.cpp:97:50: error: macro "minor" passed 3 arguments, but takes just 1 
chapter8_1.cpp:136:36: error: macro "minor" passed 3 arguments, but takes just 1 
chapter8_1.cpp:97:11: error: function definition does not declare parameters 
chapter8_1.cpp: In member function ‘double Matrices::determinant(double**, int)’: 
chapter8_1.cpp:136:17: error: ‘minor’ was not declared in this scope 

現在這兩個功能都在一個struct,但如果我編譯他們在沒有struct(簡單獨立的函數),然後g + +給我沒有錯誤,程序工作正常。該程序旨在計算任何方陣的行列式。

代碼:

struct Matrices 
{ 
....... 

    double **minor(double **matrix, int dim, int row) // row stands for the number of column that we are expanding by 
    { 
     int dim2 =--dim; 
     double **minor2; 
     minor2=new double*[dim2];       // creates minor matrix 
     for(int i=0; i<dim2; ++i) 
      minor2[i]=new double[dim2]; 

     for(int hhh=0; hhh<dim2; ++hhh) 
      { 
       int bbb=0; 
       for(int aaa=0; aaa<dim2+1; ++aaa)     // initializing the minor matrix 
        { 

        if (aaa==row) 
         continue; 
        else 
         { 
          minor2[hhh][bbb]=matrix[hhh+1][aaa]; 
          ++bbb; 
         } 
        } 
       } 
     return minor2; 
    } 

    double determinant(double **mat, int dim) 
    { 
    double det=0; 
    if(dim==1) 
    det=mat[0][0]; 
    if(dim==2) 
    det=mat[0][0]*mat[1][1]-mat[0][1]*mat[1][0]; 
    else 
    { 
    double ***setOFmat;          // pointer that points to minors 
    setOFmat=new double**[dim]; 
    for (int ddd=0; ddd<dim; ++ddd)       // ddd represents here the number of column we are expanding by 
     setOFmat[ddd]=minor(mat, dim, ddd); 
    for (int ddd=0; ddd<dim; ++ddd)       // ddd srepresents the same here 
    { 

     det= det + pow(-1.0,ddd)*mat[0][ddd]*determinant(setOFmat[ddd], dim-1); // actual formula that calculates the determinant 

    } 
    } 
    return det; 
    } 
+0

在一個struct?你是說在一個班級? –

+8

由於錯誤消息提到了名爲'minor'的**宏**,因此似乎有一個具有該名稱的預處理器宏。嘗試重命名你的函數,看看它是否更好。 –

+0

或者至少用大寫來定義你的宏。 – Aesthete

回答

0

您應仔細閱讀錯誤消息的更多一點:-)

chapter8_1.cpp:97:50: error: macro "minor" passed 3 arguments, but takes just 1

這意味着,gcc認爲minor是一些描述宏這樣的預處理該行:

double **minor(double **matrix, int dim, int row) 

is lik非常麻煩。

我會gcc -E編譯它,從而獲得預處理器輸出,這樣你就可以知道:

  • 它是如何破壞您的線;和
  • 有希望在minor宏定義。