2013-02-27 39 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

相关问题