2013-02-27 45 views
3

我想在C++中創建一個2x2矩陣類,並且想通過默認構造函數將矩陣初始化爲單位矩陣。我的課程是:在類的默認構造函數中初始化一個2x2矩陣

class Matrix2x2 
{ 
public: 
    Matrix2x2(); 
    void setVal(int row, int col, double newVal); 

private: 
    double n[2][2]; 
}; 

void Matrix2x2::setVal(int row, int col, double newVal) 
{ 
n[row][col] = newVal; 
} 

我試過了幾個不同的構造函數,但是他們都沒有做我想做的。

Matrix2x2::Matrix2x2(): setVal(0,0,1), setVal(0,1,0), setVal(1,0,0), setVal(1,1,1) 
{ } 

Matrix2x2::Matrix2x2(): n[0][0](1), n[0][1](0), n[1][0](0), n[1][1](1) 
{ } 

我意識到,它可能只是一個簡單的錯誤的地方,但我不能似乎找不到它,任何想法?

+0

是否有任何理由你不使用像Boost uBlas或NT2這樣的真正的LA庫? – 111111 2013-02-27 16:57:11

+2

爲什麼瘋狂的語法?爲什麼不使用默認值作爲正常的構造函數? – speeder 2013-02-27 17:01:06

回答

1

I'm trying to create a 2x2 matrix-class in C++ and want to initialize the matrix to an identity matrix through the default constructor.

//constructor (inside class) 
Matrix2x2() 
{ 
    n[0][0] = 1.0; 
    n[1][1] = 1.0; 
    n[0][1] = 0; 
    n[1][0] = 0; 

} 
2

可以使用陣列骨料:

class Matrix2x2 { 
public: 
    Matrix2x2() : n({{3,1},{4,7}}) { 
    } 
    void setVal(int row, int col, double newVal); 
private: 
    double n[2][2]; 
}; 

Demo on ideone.

+0

謝謝,但我得到: 錯誤:只有'()'被允許作爲數組成員「Matrix2x2 :: n」在第一個'{'的初始值設定項。 和錯誤:預期';'在第二個','和第三個'}'。 – Jon 2013-02-27 17:21:19

+0

@Jon你用什麼編譯器? – dasblinkenlight 2013-02-27 17:23:01

+0

MS Visual C++ 2010 Express。我不得不在構造函數體中編寫初始化,以使它看起來像工作。 – Jon 2013-02-27 17:25:45

0

或這樣

Matrix2x2::Matrix2x2() 
{ 
    setVal(0,0,1); 
    setVal(0,1,1); 
    setVal(1,0,1); 
    setVal(1,1,1); 
} 
2

在C++ 11:

Matrix2x2::Matrix2x2(): n{{1,0},{0,1}} {} 

歷史,你不能初始化在初始化器列表排列,所以如果你停留在過去,那麼你就必須在構造函數體內分配值:

Matrix2x2::Matrix2x2() 
{ 
    n[0][0] = 1; // or setVal(0,0,1) if you prefer 
    n[0][1] = 0; 
    n[1][0] = 0; 
    n[1][1] = 1; 
} 
+0

只有「工作」是第二種選擇。但是,編譯時給我另一個錯誤: 1> main.obj:錯誤LNK2005:「public:__thiscall Matrix2x2 :: Matrix2x2(void)」(?? 0Matrix2x2 @@ QAE @ XZ)已在函數中定義.obj 1> d:\ documents \ visual studio 2010 \ Projects \ Ov05 \ Debug \ Ov05.exe:致命錯誤LNK1169:找到一個或多個多重定義的符號 – Jon 2013-02-27 17:13:43

+0

@Jon:這聽起來像是您在標題中定義構造函數。將定義移動到單個源文件中,或者將「inline」添加到頭中的定義中,或者將定義移到類定義中。 – 2013-02-27 17:15:33

+0

你是完全正確的!謝謝。 將定義移到我的functions.cpp文件中,一切開始工作。 ;) – Jon 2013-02-27 17:23:35

相關問題