在类的默认构造函数中初始化一个2x2矩阵
我想在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)
{ }
我意识到,它可能只是一个简单的错误的地方,但我不能似乎找不到它,任何想法?
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;
}
可以使用阵列骨料:
class Matrix2x2 {
public:
Matrix2x2() : n({{3,1},{4,7}}) {
}
void setVal(int row, int col, double newVal);
private:
double n[2][2];
};
谢谢,但我得到: 错误:只有'()'被允许作为数组成员“Matrix2x2 :: n”在第一个'{'的初始值设定项。 和错误:预期';'在第二个','和第三个'}'。 – Jon 2013-02-27 17:21:19
@Jon你用什么编译器? – dasblinkenlight 2013-02-27 17:23:01
MS Visual C++ 2010 Express。我不得不在构造函数体中编写初始化,以使它看起来像工作。 – Jon 2013-02-27 17:25:45
或这样
Matrix2x2::Matrix2x2()
{
setVal(0,0,1);
setVal(0,1,1);
setVal(1,0,1);
setVal(1,1,1);
}
在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;
}
只有“工作”是第二种选择。但是,编译时给我另一个错误: 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
@Jon:这听起来像是您在标题中定义构造函数。将定义移动到单个源文件中,或者将“inline”添加到头中的定义中,或者将定义移到类定义中。 – 2013-02-27 17:15:33
你是完全正确的!谢谢。 将定义移到我的functions.cpp文件中,一切开始工作。 ;) – Jon 2013-02-27 17:23:35
是否有任何理由你不使用像Boost uBlas或NT2这样的真正的LA库? – 111111 2013-02-27 16:57:11
为什么疯狂的语法?为什么不使用默认值作为正常的构造函数? – speeder 2013-02-27 17:01:06