Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Gemeinsame Klassenvariablen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
05.03.2006, 13:26 Uhr
Leopard



Hi ,

Wenn ich folgenden Code kompiliere, bekomme ich folgende fehlermeldung

C++:
#include <iostream>
using namespace std;

class C
{
      public:
              C (int x) { a = x; }
              void incA () { ++a; }
              static void incB () { ++b; }
      private:
               int a ;
               static int b ;
};

int main ()
{
    C c(3);
    c.incA();
    c.incB (); // Hier muesste eigentlich der Fehler sein, weil wenn ich auskommentiere
                 //laeuft alles wie gewollt.
                 //Fehlermeldung : [Linker error] undefined reference to `C::b'
cin.get();  
return 0;
}




gruß
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.03.2006, 16:33 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


ungetestet

C++:
class C
{
      public:
              C (int x) { a = x; }
              void incA () { ++a; }
              static void incB () { ++b; }
      private:
               int a ;
               static int b;
};

int C::b = 0;

int main ()
{
    C c(3);
    c.incA();
    C::incB();
}


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.03.2006, 16:36 Uhr
ref



Nur return 0; dazu am ende main()
--
Man kann ein Problem nicht mit der gleichen Denkweise lösen, mit der es erschaffen wurde. (Albert Einstein)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
05.03.2006, 17:03 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


nein ist nicht notwendig... per standard wird 0 "returned" wenn nichts weiter angegeben ist (und wir sind hier im forum dem der standard am herzen liegt ;-) )
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
05.03.2006, 20:59 Uhr
ao

(Operator)



Zitat von Windalf:


C++:
int main ()
{
    C c(3);
    c.incA();
    // C::incB();
    c.incB();  // ist genausogut.
}



ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
05.03.2006, 21:45 Uhr
Pler
Einer von Vielen
(Operator)



Zitat von Windalf:

nein ist nicht notwendig... per standard wird 0 "returned" wenn nichts weiter angegeben ist (und wir sind hier im forum dem der standard am herzen liegt ;-) )



Hm, das ist mir neu.
Ich bin bisher immer davon ausgegangen, dass es gerade nicht Standard ist, sondern (fast?) alle Compiler diesen Fehler nur übergehen (oder ausbüglen, oder sowas).
Also hab ich's gleich mal ausprobiert:

- Bei einem C++-Programm meckert der g++ tatsächlich nicht. Er gibt allerdings ein Warning aus, wenn man das int vor main() weglässt. "Das ist nicht ISO C++-Konform" (Sinngemäß)
- Bei einem C-Programm gibts dann aber an beiden Stellen ein Waring.

Also hab ich gleich noch mal in einem Buch nachgeschaut. Leider wird nur gesagt, dass es Standard ist, dass main als mit Rückgabetyp int deklariert sein muss. Aber nicht, dass es nicht verlangt ist, dass man auch return 0; schreibt.

Allerdings, und das sehe ich auf jeden Fall genauso:

Zitat von Buch:

Bei einigen Compilern können Sie den Rückgabewert von main() als void deklarieren. Das entspricht jedoch nicht mehr dem gültigen C++-Standard, und Sie sollten es vermeiden, in schlechte Angewohnheiten zu verfallen. Besser ist es, main() einen Integer zurückliefern zu lassen und in der letzten Zeile von main() eine 0 zurückzugeben.


(Hervorhebung von mir)

Fazit:
In C ist es Standard.
Und ich habe nichts gefunden, wo ausgesagt wird, dass es in C++ kein Standard mehr ist.

Dieser Post wurde am 05.03.2006 um 21:49 Uhr von Pler editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
05.03.2006, 22:36 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


mir war so als hätte virtual mal sowas gesagt und für mich ist alles was virtual sagt standard (ich kann mich aber irren mir da was falsch gemerkt zu haben)


Zitat:


C++:
c.incB();  // ist genausogut.




das schon find ich aber irgendwie komisch die methode von einem objekt einer klasse aus aufzurufen obwohl diese mit dem objekt ja eigentlich nicht soviel am hut hat... deshalb hab ichs so verbessert wie ichs besser finde
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
06.03.2006, 01:24 Uhr
virtual
Sexiest Bit alive
(Operator)


Ich muß Windalf in allen strittigen Punkten unterstützen:
1. Was das retrun 0 am Ende von main angeht:
Aus dem ANSI C Standard:

Zitat:

5.1.2.2.3 Program termination
If the return type of the main function is a type compatible with int, a return from the initial call to the main function is equivalent to calling the exit function with the value returned by the main function as its argument; reaching the } that terminates the main function returns a value of 0. If the return type is not compatible with int, the termination status returned to the host environment is unspecified.


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
06.03.2006, 10:25 Uhr
Pler
Einer von Vielen
(Operator)


@virtual:
Also gibt der gcc ein falsches Warning aus?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
06.03.2006, 11:59 Uhr
virtual
Sexiest Bit alive
(Operator)


@pler
gut möglich. wesentlich "gefährlicher" ist allerdings der Umstand, daß ein mit dem gcc compiliertes Programm dann den Returncode nicht entsprechend setzt.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: