Re: linkage error when initializing static member array
From: Victor Bazarov (v.Abazarov_at_comAcast.net)
Date: 10/23/04
- Next message: Steven T. Hatton: "Re: One Big (std::) Header File?"
- Previous message: Joe Laughlin: "Re: weird error"
- In reply to: Neno: "linkage error when initializing static member array"
- Next in thread: Neno: "Re: linkage error when initializing static member array"
- Reply: Neno: "Re: linkage error when initializing static member array"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Date: Sat, 23 Oct 2004 01:57:54 GMT
"Neno" <m_marchionni@tiscali.it> wrote...
> 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?
Static data members have to be defined. You need to place the definition
at the namespace level where your class is declared.
> 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"
Add here:
Month *Month::months[12] = { 0 };
>
> 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];
Add setting them to 0 too.
> }
>
> 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];
> }
> ----------------------------------------------------
V
- Next message: Steven T. Hatton: "Re: One Big (std::) Header File?"
- Previous message: Joe Laughlin: "Re: weird error"
- In reply to: Neno: "linkage error when initializing static member array"
- Next in thread: Neno: "Re: linkage error when initializing static member array"
- Reply: Neno: "Re: linkage error when initializing static member array"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Relevant Pages
|