Vorrei capire perche' questo funziona:
codice:
class Rect
{
      public:
             Rect()
             {num ++;}

             ~Rect()
             {num --;}

             static void pippo(){num ++;};

      protected:
                static int num;

                };
int num = 0;

main(){}


e questo no.



codice:
class Rect
{
      public:
             Rect()
             {num ++;}

             ~Rect()
             {num --;}

             static void pippo();

      protected:
                static int num;

                };
int num = 0;
void Rect::pippo() {num ++;}
main(){}


Perche' devo per forza definire la funzione dentro la dichiarazione della classe?

Tra l'altro lo stesso errore viene fuori con il codice d'esempio pubblicato qui (sez 10.1):

http://www.icce.rug.nl/documents/cpl...lusplus10.html

codice:
    
class Test
    {
        static int s_private_int;

        public:
            static int s_public_int;
    };

    int main()
    {
        Test::s_public_int = 145;   // ok

        Test::s_private_int = 12;   // wrong, don't touch
                                    // the private parts
        return 0;
    }
(ovviamente commentando la riga
Test::s_private_int = 12; // wrong, don't touch)


quindi e' un errore subdolo, sfuggito anche a chi scrive articoli seri...

Grazie a tutti e ciao!