2014-03-01 53 views
0

我試圖做一個布爾函數驗證是否矩陣是對稱的,但我得到這個錯誤:錯誤:無法將'float(*)[(((sizetype)(((ssizetype)n)+ -1))+ 1)]''轉換爲參數'3'的float(*)[100]'

|54|error: cannot convert 'float ()[(((sizetype)(((ssizetype)n) + -1)) + 1)]' to 'float ()[100]' for argument '3' to 'void Transpose(int, float ()[100], float ()[100])'|

#include <iostream> 
using namespace std; 

void Transpose(int n, float a[][MAX], float T[][MAX]) { 
    int i,j; 

    for(i = 0; i < n; i++){ 
     for(j = 0; j < n; j++){ 
      T[i][j] = a[j][i]; 
     } 
    } 
} 

bool Symmetric(int n, float a[][MAX]) { 
    float t[n][n]; 
    int i,j; 

    for(i = 0; i < n; i++){ 
     for(j = 0; j < n; j++){ 
      t[i][j] = 0; 
     } 
    } 

    Transpose(n,a,t); // <--- Error here. 

    for(i = 0; i < n; i++){ 
     for(j = 0; j < n; j++){ 
      if(t[i][j] != a[i][j]){ 
       return false; 
      } 
     } 
    } 

    return true; 
} 

Transpose(n,a,t);

+0

'float t [n] [n];'請注意,VLA並不是C++語言的正式組成部分。在C++中,數組只能使用編譯時表達式聲明,而不是運行時值。 – PaulMcKenzie

回答

3

發生錯誤什麼的編譯器說:是float t[n][n]的數組,其中n是編譯時變量[即,不是常量]不匹配float T[][MAX],當MAX是編譯時常量。

它可能會正常工作使用float t[n][MAX]您的臨時矩陣。但是,請記住,C和C++沒有處理「可變大小的數組」(特別是將它們從一個函數傳遞到另一個函數時),而在C++中,使用不同的方式來處理可能更好描述你的矩陣。例如:

std::vector<vector<float>> t; 

那麼你需要做更多的工作來定義矢量的大小,例如:

t.resize(n); 
for(i = 0; i < n; i++){ 
    t[i].resize(n); 
+0

我明白了... float t [n] [MAX]很適合我 – LVL

0

你可以做的是替換的std ::載體的那些陣列< vector < float >>,正如其他答案所述。我會使用typedef來使事情變得更簡單。另外,一旦你開始使用vector,就可以利用其他方式來利用它,比如更簡單的初始化。

#include <vector> 
typedef std::vector<float> Float1D; 
typedef std::vector<Float1D> Float2D; 

void Transpose(int n, const Float2D& a, Float2D& T) 
{ 
    int i,j; 
    for(i = 0; i < n; i++){ 
     for(j = 0; j < n; j++){ 
      T[i][j] = a[j][i]; 
    } 
} 

bool Symmetric(int n, Float2D& a) 
{ 
    Float2D t(n, Float1D(n,0)); 
    Transpose(n,a,t); 
    // assuming that a and t are the same size matrix 
    return t == a; 
} 

注意對稱函數中t矢量的初始化。沒有循環是需要的,因爲所做的全部都是用n的行大小來聲明它,並且用一維浮點向量初始化每一行,並且一維數組中的每個條目都初始化爲0.

另請注意最後的測試。我所做的只是比較使用operator ==的向量是否具有相同的分量。

上面的代碼,我假設你的矩陣是相同的大小。如果沒有,你需要進行檢查以確保這一點(我沒有這樣做)。

相關問題