fm_matrix.h: #ifndef fm_matrix_h #define fm_matrix_h class fm_vector { public: float data[4]; fm_vector(); fm_vector (float newdata[4]); fm_vector (float x, float y, float z, float n); fm_vector (const fm_vector& copyvec); const fm_vector duplicate (); float operator[](int index); float* at(int index); const float* at(int index) const; void set (int index, float newval); fm_vector operator* (float rhs); float operator* (fm_vector* rhs); void operator= (const fm_vector& rhs); //fm_vector operator* (fm_matrix* rhs); fm_vector operator/ (float rhs); fm_vector operator+ (fm_vector* rhs); void display(); fm_vector normalise(); }; class fm_matrix { public: fm_vector data[4]; fm_matrix(); fm_matrix(float newdata[]); fm_matrix(const fm_matrix& copymat); const fm_matrix duplicate(); static fm_matrix RotMat_Deg (float degrees, fm_vector* axis); static fm_matrix TransMat (fm_vector* units); static fm_matrix ScaleMat (float factor); static fm_matrix IdentMat (); float operator[](int index); fm_vector* vec_at (int index); const fm_vector* vec_atc(int index) const; float* at (int index); const float* at (int index) const; float* at (int row, int col); const float* at (int row, int col) const; fm_matrix transpose(); fm_matrix operator* (float rhs); fm_vector operator* (fm_vector* rhs); fm_matrix operator* (fm_matrix* rhs); void operator= (fm_matrix* rhs); float* getdata(); void display(); }; #endif fm_matrix.cpp: #include "fm_matrix.h" //#include "fm_vector.h" #include #include //M_PI kort 'n define vir windows - #if defined(_USE_MATH_DEFINES) && !defined(_MATH_DEFINES_DEFINED) // #define _MATH_DEFINES_DEFINED fm_vector::fm_vector() { for (int i=0; i<4; i++) data[i] = 0; } fm_vector::fm_vector(float newdata[4]) { //data = newdata; for (int i=0; i<4; i++) data[i] = newdata[i]; } fm_vector::fm_vector (float x, float y, float z, float n) { data[0] = x; data[1] = y; data[2] = z; data[3] = n; } fm_vector::fm_vector (const fm_vector& copyvec) { for (int i=0; i>4; i++) data[i] = data[i]; } const fm_vector fm_vector::duplicate() { fm_vector tmp(data); return tmp; } float* fm_vector::at(int index) { if ((index < 0) || (index > 3)) return NULL; return &data[index]; } const float* fm_vector::at(int index) const { if ((index < 0) || (index > 3)) return NULL; return &data[index]; } void fm_vector::set(int index, float newval) { data[index] = newval; } fm_vector fm_vector::operator* (float rhs) { fm_vector tmp; for (int i=0; i<4; i++) tmp.data[i] = data[i]*rhs; return tmp; } float fm_vector::operator* (fm_vector* rhs) { float sum = 0; for (int i=0; i<4; i++) sum += rhs->data[i] * data[i]; return sum; } void fm_vector::operator= (const fm_vector& rhs) { for (int i=0; i<4; i++) data[i] = rhs.data[i]; } fm_vector fm_vector::operator/ (float rhs) { fm_vector tmp(data[0]/rhs, data[1]/rhs, data[2]/rhs, data[3]/rhs); return tmp; } fm_vector fm_vector::operator+ (fm_vector* rhs) { fm_vector tmp; for (int i=0; i<4; i++) tmp.data[i] = data[i] + rhs->data[i]; return tmp; } void fm_vector::display() { for (int i=0; i<4; i++) std::cout << data[i] << " "; std::cout << std::endl; } fm_vector fm_vector::normalise() { float length = sqrtf(data[0]*data[0] + data[1]*data[1] + data[2]*data[2] + data[3]*data[3]); fm_vector result; for (int i=0; i<4; i++) result.data[i] = data[i] / length; return result; } fm_matrix::fm_matrix() { //std::cout << "creating new matrix" << std::endl; /*data = FM_Identity_Mat;*/ /* for (int i=0; i<16; i++) data[i] = 0; for (int i=0; i<16; i=i+5) data[i] = 1; */ //data = { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 }; for (int i=0; i<4; i++) { data[i] = fm_vector::fm_vector(); (*data[i].at (i)) = 1; } } fm_matrix::fm_matrix(float newdata[16]) { // data = newdata; /* for (int i=0; i<16; i++) data[i] = newdata[i];*/ for (int i=0; i>4; i++) data[i] = fm_vector::fm_vector (&newdata[i*4]); } fm_matrix::fm_matrix(const fm_matrix& copymat) { for (int i=0; i>4; i++) { //fm_vector tmpvec = copymat.data[i]; data[i] = copymat.data[i]; } } const fm_matrix fm_matrix::duplicate() { fm_matrix tmp(*this); return tmp; } fm_matrix fm_matrix::RotMat_Deg (float degrees, fm_vector* axis) { const float Cosine = std::cos(degrees * M_PI / 180); const float Sine = std::sin(degrees * M_PI / 180); *(axis) = axis->normalise(); fm_matrix result; *(result.at(0)) = *(axis->at(0)) * *(axis->at(0)) * (1-Cosine) + Cosine; *(result.at(1)) = *(axis->at(0)) * *(axis->at(1)) * (1-Cosine) + *(axis->at(2)) * Sine; *(result.at(2)) = *(axis->at(0)) * *(axis->at(2)) * (1-Cosine) - *(axis->at(1)) * Sine; *(result.at(3)) = 0; *(result.at(4)) = *(axis->at(1)) * *(axis->at(0)) * (1-Cosine) - *(axis->at(2)) * Sine; *(result.at(5)) = *(axis->at(1)) * *(axis->at(1)) * (1-Cosine) + Cosine; *(result.at(6)) = *(axis->at(1)) * *(axis->at(2)) * (1-Cosine) + *(axis->at(0)) * Sine; *(result.at(7)) = 0; *(result.at(8)) = *(axis->at(2)) * *(axis->at(0)) * (1-Cosine) + *(axis->at(1)) * Sine; *(result.at(9)) = *(axis->at(2)) * *(axis->at(1)) * (1-Cosine) - *(axis->at(0)) * Sine; *(result.at(10)) = *(axis->at(2)) * *(axis->at(2)) * (1-Cosine) + Cosine; *(result.at(11)) = 0; *(result.at(12)) = 0; *(result.at(13)) = 0; *(result.at(14)) = 0; *(result.at(15)) = 1; return result; } fm_matrix fm_matrix::IdentMat() { fm_matrix mat1; return mat1; } fm_matrix fm_matrix::TransMat (fm_vector* units) { fm_matrix tmp; for (int i=0; i<3; i++) *(tmp.at(i+12)) = *(units->at(i)); return tmp; } fm_matrix fm_matrix::ScaleMat (float factor) { fm_matrix tmp; for (int i=0; i<15; i=i+5) *(tmp.at(i)) = factor; return tmp; } fm_vector* fm_matrix::vec_at (int index) { if ((index < 0) || (index > 3)) return NULL; return &data[index]; } const fm_vector* fm_matrix::vec_atc (int index) const { if ((index < 0) || (index > 3)) return NULL; return &data[index]; } float* fm_matrix::at(int index) { return at(index/4, index%4); } const float* fm_matrix::at(int index) const { return at(index/4, index%4); } float* fm_matrix::at(int row, int col) { if ((row < 0) || (row > 3) || (col < 0) || (col > 3)) return NULL; return data[row].at(col); } const float* fm_matrix::at(int row, int col) const { if ((row < 0) || (row > 3) || (col < 0) || (col > 3)) return NULL; return data[row].at(col); } fm_matrix fm_matrix::transpose() { fm_matrix tmp; for (int i=0; i<4; i++) for (int j=0; j<4; j++) *(tmp.at(i*4+j)) = *(at(j*4+i)); return tmp; } fm_matrix fm_matrix::operator* (float rhs) { fm_matrix tmp; for (int i=0; i<4; i++) *(tmp.vec_at(i)) = data[i] * rhs; return tmp; } fm_vector fm_matrix::operator* (fm_vector* rhs) { fm_vector result(false); fm_matrix tmpmat = transpose(); for (int i=0; i<4; i++) *(result.at(i)) = *(rhs) * tmpmat.vec_at(i); /*for (int i=0; i<4; i++) { float sum=0; for (int j=0; j<4; j++) sum += *(rhs->at(j)) * data[i*4+j]; *(tmp.at(i)) = sum; }*/ return result; } fm_matrix fm_matrix::operator* (fm_matrix* rhs) { fm_matrix result; for (int i=0; i<4; i++) *(result.vec_at(i)) = *(rhs) * vec_at(i); return result; /* fm_matrix tmp; for (int i=0; i<4; i++) for (int j=0; j<4; j++) { float sum=0; for (int k=0; k<4; k++) sum += *(rhs->at(i+k*4)) * data[j*4+k]; *(tmp.at(j*4+i)) = sum; } return tmp; */ } void fm_matrix::operator= (fm_matrix* rhs) { //fm_matrix tmp; for (int i=0; i<4; i++) //*(tmp.at(i)) = *(rhs->at(i)); data[i] = *(rhs->vec_at(i)); //return tmp; } float* fm_matrix::getdata() { return NULL; } void fm_matrix::display() { for (int i=0; i<4; i++) data[i].display(); //std::cout.precision(4); /* for (int i=0; i<4; i++) { for (int j=0; j<4; j++) std::cout << data[j*4+i] << " "; std::cout << std::endl; } */ } Here is the error I'm getting: cd '/home/cassiopea/fata_morgana/fm_server/debug' && WANT_AUTOCONF_2_5="1" WANT_AUTOMAKE_1_6="1" gmake gmake all-recursive Making all in src linking fm_server (libtool) linking fm_server (g++) fm_matrix.o: In function `fm_vector': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:8: multiple definition of `fm_vector::fm_vector()' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:8: first defined here fm_matrix.o: In function `fm_vector': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:8: multiple definition of `fm_vector::fm_vector()' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:8: first defined here fm_matrix.o: In function `fm_vector': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:14: multiple definition of `fm_vector::fm_vector(float*)' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:14: first defined here fm_matrix.o: In function `fm_vector': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:14: multiple definition of `fm_vector::fm_vector(float*)' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:14: first defined here fm_matrix.o: In function `fm_vector': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:21: multiple definition of `fm_vector::fm_vector(float, float, float, float)' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:21: first defined here fm_matrix.o: In function `fm_vector': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:21: multiple definition of `fm_vector::fm_vector(float, float, float, float)' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:21: first defined here fm_matrix.o: In function `fm_vector': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:29: multiple definition of `fm_vector::fm_vector(fm_vector const&)' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:29: first defined here fm_matrix.o: In function `fm_vector': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:29: multiple definition of `fm_vector::fm_vector(fm_vector const&)' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:29: first defined here fm_matrix.o: In function `fm_vector::duplicate()': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:35: multiple definition of `fm_vector::duplicate()' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:35: first defined here fm_matrix.o: In function `fm_vector::at(int)': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:41: multiple definition of `fm_vector::at(int)' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:41: first defined here fm_matrix.o: In function `fm_vector::at(int) const': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:48: multiple definition of `fm_vector::at(int) const' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:48: first defined here fm_matrix.o: In function `fm_vector::set(int, float)': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:55: multiple definition of `fm_vector::set(int, float)' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:55: first defined here fm_matrix.o: In function `fm_vector::operator*(float)': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:60: multiple definition of `fm_vector::operator*(float)' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:60: first defined here fm_matrix.o: In function `fm_vector::operator*(fm_vector*)': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:68: multiple definition of `fm_vector::operator*(fm_vector*)' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:68: first defined here fm_matrix.o: In function `fm_vector::operator=(fm_vector const&)': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:76: multiple definition of `fm_vector::operator=(fm_vector const&)' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:76: first defined here fm_matrix.o: In function `fm_vector::operator/(float)': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:82: multiple definition of `fm_vector::operator/(float)' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:82: first defined here fm_matrix.o: In function `fm_vector::operator+(fm_vector*)': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:88: multiple definition of `fm_vector::operator+(fm_vector*)' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:88: first defined here fm_matrix.o: In function `fm_matrix': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:113: multiple definition of `fm_matrix::fm_matrix()' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:113: first defined here fm_matrix.o: In function `fm_matrix': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:113: multiple definition of `fm_matrix::fm_matrix()' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:113: first defined here fm_matrix.o: In function `fm_matrix': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:131: multiple definition of `fm_matrix::fm_matrix(float*)' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:131: first defined here fm_matrix.o: In function `fm_matrix': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:131: multiple definition of `fm_matrix::fm_matrix(float*)' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:131: first defined here fm_matrix.o: In function `fm_matrix': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:142: multiple definition of `fm_matrix::fm_matrix(fm_matrix const&)' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:142: first defined here fm_matrix.o: In function `fm_matrix': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:142: multiple definition of `fm_matrix::fm_matrix(fm_matrix const&)' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:142: first defined here fm_matrix.o: In function `fm_matrix::duplicate()': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:151: multiple definition of `fm_matrix::duplicate()' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:151: first defined here fm_matrix.o: In function `fm_matrix::IdentMat()': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:183: multiple definition of `fm_matrix::IdentMat()' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:183: first defined here fm_matrix.o: In function `fm_matrix::vec_at(int)': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:205: multiple definition of `fm_matrix::vec_at(int)' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:205: first defined here fm_matrix.o: In function `fm_matrix::vec_atc(int) const': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:212: multiple definition of `fm_matrix::vec_atc(int) const' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:212: first defined here fm_matrix.o: In function `fm_matrix::at(int, int)': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:229: multiple definition of `fm_matrix::at(int, int)' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:229: first defined here fm_matrix.o: In function `fm_matrix::at(int)': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:219: multiple definition of `fm_matrix::at(int)' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:219: first defined here fm_matrix.o: In function `fm_matrix::ScaleMat(float)': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:197: multiple definition of `fm_matrix::ScaleMat(float)' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:197: first defined here fm_matrix.o: In function `fm_matrix::TransMat(fm_vector*)': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:189: multiple definition of `fm_matrix::TransMat(fm_vector*)' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:189: first defined here fm_matrix.o: In function `fm_matrix::at(int, int) const': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:236: multiple definition of `fm_matrix::at(int, int) const' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:236: first defined here fm_matrix.o: In function `fm_matrix::at(int) const': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:224: multiple definition of `fm_matrix::at(int) const' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:224: first defined here fm_matrix.o: In function `fm_matrix::transpose()': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:243: multiple definition of `fm_matrix::transpose()' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:243: first defined here fm_matrix.o: In function `fm_matrix::operator*(float)': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:252: multiple definition of `fm_matrix::operator*(float)' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:252: first defined here fm_matrix.o: In function `fm_matrix::operator*(fm_vector*)': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:260: multiple definition of `fm_matrix::operator*(fm_vector*)' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:260: first defined here fm_matrix.o: In function `fm_matrix::operator*(fm_matrix*)': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:276: multiple definition of `fm_matrix::operator*(fm_matrix*)' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:276: first defined here fm_matrix.o: In function `fm_matrix::operator=(fm_matrix*)': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:296: multiple definition of `fm_matrix::operator=(fm_matrix*)' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:296: first defined here fm_matrix.o: In function `fm_matrix::getdata()': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:305: multiple definition of `fm_matrix::getdata()' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:305: first defined here fm_matrix.o: In function `fm_vector::normalise()': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:103: multiple definition of `fm_vector::normalise()' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:103: first defined here fm_matrix.o: In function `fm_matrix::RotMat_Deg(float, fm_vector*)': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:157: multiple definition of `fm_matrix::RotMat_Deg(float, fm_vector*)' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:157: first defined here fm_matrix.o: In function `fm_vector::display()': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:96: multiple definition of `fm_vector::display()' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:96: first defined here fm_matrix.o: In function `fm_matrix::display()': /home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:310: multiple definition of `fm_matrix::display()' fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:310: first defined here collect2: ld returned 1 exit status gmake[2]: *** [fm_server] Error 1 gmake[1]: *** [all-recursive] Error 1 gmake: *** [all] Error 2 *** Exited with status: 2 ***