[root@localhost test-analysis]# g++ -o test1 test1.cpp Math2.cpp LinearRegression.cpp
test1.h:28: error: ISO C++ forbids declaration of ‘MathEx’ with no type
test1.h:28: error: expected ‘;’ before ‘*’ tok
CODE====================================================
Math2.h
#ifndef __MATHEX__
#define __MATHEX__
#include "test1.h"
typedef double Real;
typedef struct { Real r; Real i; } Complex;
typedef Real* Real_Vector;
#define BYTE short
class MathEx {
public:
MathEx() { }
~MathEx() { }
void least_sq(void);
void gas_equation(void);
void Linear_Regression(const float *x, const float *y, int n, float *m, float *b, float *rsq );
};
#endif
===================================================
test1.h
#ifndef __PLUMEANALYSIS__
#define __PLUMEANALYSIS__
#include "Math2.h"
typedef float PlumeData; // Placeholder
class PlumeAnalysis
{
public:
PlumeAnalysis() : m_pMath() { }
~PlumeAnalysis() { delete m_pMath; }
void Calibration(void);
void Calculate (PlumeData *p);
//void LinearRegression(void);
void Ask_USB_Device(void);
void StoreDatabase(void);
void GetData(void);
void GetRef(void);
void GetDark(void);
void GetValues(void);
void Analyse(void);
void StoreDataBase(void);
private:
bool m_bInterrupt;
MathEx *m_pMath; <<<<<<<<<<<<<<<<<<<<<< Error
private:
double m_CO_CO2_Ratio;
double m_HC_CO2_Ratio;
double m_NOX_CO2_Ratio;
float m_Result_CO;
float m_Result_CO2;
float m_Result_HC;
float m_Result_NOX;
};
#endif
=======================================================
test1.cpp
#include "test1.h"
int main (int argc, char *argv[])
{
PlumeAnalysis *analysis;
analysis = new PlumeAnalysis();
analysis->Analyse();
return 0;
}
========================================================
LinearRegression.h
#include "test1.h"
void PlumeAnalysis::Analyse(void)
{
PlumeData *p;
GetData();
Calculate(p);
StoreDatabase();
}
void PlumeAnalysis::Calculate(PlumeData *pPlume)
{
float fDenominator;
// Considering points that would abruptly out of scale, there might be problems
// with those readings. So they might be dropped off and dispose of.
// Numerical methods that are used to plot a straight line over many reading points
m_pMath->LinearRegression (pPlume->CO2Array, pPlume->COArray, total, &m_CO2SlopeCO, &m_CO2InterceptCO, &m_CO2SlopeCOmse);
// HC Readings should usually lower than CO and CO2
m_pMath->LinearRegression (pPlume->CO2Array, pPlume->HCArray, total, &m_CO2SlopeCO,
&m_CO2InterceptHC, &m_HCSlipeHCmse);
m_pMath->LinearRegression (pPlume->CO2Array, pPlume->NOXArray, total, &m_CO2SlopeNOX,
&m_CO2InterceptNOX, &m_CO2SlopeNOXmse);
m_CO_CO2_Ratio = m_CO2SlopeCO;
m_HC_CO2_Ratio = m_CO2SlopeHC;
m_NOX_CO2_Ratio = m_CO2SlopeNOX;
// General formula that can be found in patents
fDenominator = 2.79 + 2.0 * m_CO_CO2_Ratio - 0.37 * m_HC_CO2_Ratio;
// I guess the following results don't fit in one scale, so
// they were multiplied by a large integer in Judge 31s
m_Result_CO = (42.0 * m_CO_CO2_Ratio) / dDenominator;
m_Result_CO2 = 42.0 / dDenominator;
m_Result_HC = (42.0 * m_HC_CO2_Ratio) / dDenominator;
m_Result_NOX = (42.0 * m_NOX_CO2_Ratio) / dDenominator;
}
void PlumeAnalysis::GetData(void)
{
Calibration();
for (;
{
if (m_bInterrupt) {
Ask_USB_Device();
GetRef();
GetDark();
for (;
{
GetValues();
}
}
}
}
void PlumeAnalysis::Ask_USB_Device(void)
{
}
void PlumeAnalysis::GetRef(void)
{
}
void PlumeAnalysis::GetDark(void)
{
}
void PlumeAnalysis::GetValues(void)
{
}
void PlumeAnalysis::StoreDatabase(void)
{
}
void PlumeAnalysis::Calibration(void)
{
}
Thanks
Jack