N
Neno
Hi,
I have a linkage error that has something to do with the use of a static
member array and I can't understand how to solve the problem. Can someone
help me please?
In detail:
A class Month (it is just an unsafe and useless example) has protected
constructors so that Month objects can be obtained only through a static
member function named getMonth.
Month class has a private static array named months made of 12 pointers to
Month objects and I would like getMonths to populate the array when
necessary and return just the objects in the array.
The problem is that the linker complains with :
unresolved external symbol "private: static class Month * * Month::months"
The code below is the header and cpp files for the class Month.
----- Month.h -----------------------------
class Month {
public:
virtual ~Month();
static Month *getMonth(int num);
const int numOfDays;
protected:
Month(int num);
Month(Month const ©);
private:
static Month *months[12];
};
------ Month.cpp -----------------------------
#include "Month.h"
Month::Month(int num) : numOfDays(num) {}
Month::Month(Month const ©) : numOfDays(copy.numOfDays) {}
Month::~Month() {
for (int num = 0; num < 12; num++)
if (months[num]) delete months[num];
}
Month *Month::getMonth(int num) {
if (! months[num]) {
switch (num) {
case 1:
months[num] = new Month(29); break;
case 8:
case 5:
case 3:
case 10:
months[num] = new Month(30); break;
default:
months[num] = new Month(31);
}
}
return months[num];
}
I have a linkage error that has something to do with the use of a static
member array and I can't understand how to solve the problem. Can someone
help me please?
In detail:
A class Month (it is just an unsafe and useless example) has protected
constructors so that Month objects can be obtained only through a static
member function named getMonth.
Month class has a private static array named months made of 12 pointers to
Month objects and I would like getMonths to populate the array when
necessary and return just the objects in the array.
The problem is that the linker complains with :
unresolved external symbol "private: static class Month * * Month::months"
The code below is the header and cpp files for the class Month.
----- Month.h -----------------------------
class Month {
public:
virtual ~Month();
static Month *getMonth(int num);
const int numOfDays;
protected:
Month(int num);
Month(Month const ©);
private:
static Month *months[12];
};
------ Month.cpp -----------------------------
#include "Month.h"
Month::Month(int num) : numOfDays(num) {}
Month::Month(Month const ©) : numOfDays(copy.numOfDays) {}
Month::~Month() {
for (int num = 0; num < 12; num++)
if (months[num]) delete months[num];
}
Month *Month::getMonth(int num) {
if (! months[num]) {
switch (num) {
case 1:
months[num] = new Month(29); break;
case 8:
case 5:
case 3:
case 10:
months[num] = new Month(30); break;
default:
months[num] = new Month(31);
}
}
return months[num];
}