All pastes #589441 Raw Edit

Mine

public text v1 · immutable
#589441 ·published 2007-06-26 00:03 UTC
rendered paste body
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 <iostream>
#include <cmath> 	//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 ***