using static arrays

J

Jim

Hello,
I have a very simple object, freqoffset which I'm trying to use as
members of a static array of in another class
class freqoffset
{
public:
freqoffset():eek:ffset(0),strength(0){};
int set(double offset,double strength);
double getOff() const{return offset;};
double getStr() const{return strength;};
private:
double offset,strength;
};

class nh3fitting
{
private:
static const int sn1=18;
static const int sn2=21;
static freqoffset s1[sn1];
static freqoffset s2[sn2];
public:
nh3fitting(double cr, double cd, int n, double sd); //generates an
array and populates it with x values
static int loadArrays();
};

int nh3fitting::loadArrays()
{
s1[0].set( -1.56893, 0.0741);
s1[1].set(-1.526658 , 0.1481);
s1[2].set(-0.623335 , 0.0926);
s1[3].set( -0.590375, 0.1667);
s1[4].set(-0.581021, 0.0185);
s1[5].set(-0.036389 , 0.0370);
s1[6].set(-0.025453 , 0.0185);
s1[7].set(-0.024583, 0.0333);
s1[8].set(-0.015196, 0.3);
s1[9].set(0.005941, 0.0185);
s1[10].set(0.010463, 0.4667);
s1[11].set(0.016835, 0.0926);
s1[12].set(0.019832, 0.0333);
s1[13].set(0.571708, 0.0926);
s1[14].set(0.582719, 0.0185);
s1[15].set(0.617689 , 0.1667);
s1[16].set(1.53405, 0.0741);
s1[17].set(1.545159, 0.1481);

s2[0].set(-2.099033 ,0.0042 );
s2[1].set(-2.058267 , 0.0377);
s2[2].set( -2.053459, 0.0209);
s2[3].set(-1.297087, 0.0372);
s2[4].set(-1.296079,0.026 );
s2[5].set(-1.255384, 0.0019);
s2[6].set(-0.044498, 0.0209);
s2[7].set(-0.041806, 0.0106);
s2[8].set(-0.041456, 0.0116);
s2[9].set(-0.001031, 0.1465);
s2[10].set(0.000309, 0.4997);
s2[11].set(0.001054, 0.2674);
s2[12].set(0.039736, 0.0106);
s2[13].set(0.042055, 0.0116);
s2[14].set(0.046621 , 0.0209);
s2[15].set(1.254559, 0.0019);
s2[16].set(1.295363, 0.026);
s2[17].set(1.296295, 0.0377);
s2[18].set(2.053476, 0.0209);
s2[19].set(2.058256, 0.0377);
s2[20].set(2.099022, 0.0042);

return 0;
}

Unfortunately I get a linker error when trying to do this,
g++ -I/usr/include/gsl/ -L/usr/lib/ -c nh3fit.cpp
g++ -I/usr/include/gsl/ -L/usr/lib/ -lgsl -lgslcblas nh3fit.o -o
nh3fit
nh3fit.o: In function `nh3fitting::loadArrays()':
nh3fit.cpp:(.text+0xb7): undefined reference to `nh3fitting::s1'
nh3fit.cpp:(.text+0xd9): undefined reference to `nh3fitting::s1'
nh3fit.cpp:(.text+0xfb): undefined reference to `nh3fitting::s1'
nh3fit.cpp:(.text+0x11d): undefined reference to `nh3fitting::s1'
nh3fit.cpp:(.text+0x13f): undefined reference to `nh3fitting::s1'

and so on for both s1 and s2. Does anyone have any suggestions?

Thanks in advance,
James
 
J

Juha Nieminen

Jim said:
static freqoffset s1[sn1];
static freqoffset s2[sn2];

You declare two static arrays here, but you don't define
("instantiate") them anywhere. In other words, you are telling the
compiler "these arrays exist somewhere" (which is one thing "static"
does), however, you never actually create those arrays anywhere. Thus
the linker cannot find them and complains.

You have to put these somewhere:

freqoffset nh3fitting::s1[nh3fitting::sn1];
freqoffset nh3fitting::s2[nh3fitting::sn2];
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,967
Messages
2,570,148
Members
46,694
Latest member
LetaCadwal

Latest Threads

Top