Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » ganz ganz komischer speicherfehler Hilfe

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 ] > 2 <
010
18.06.2003, 23:38 Uhr
ao

(Operator)



Zitat:
virtual postete
Bei beefy tut das deshalb nicht, weil er das als C Code übersetzt hat, in C++ ist das, wie ao schon bemerkt hat, eine initialisierung und keine Zuweisung ist. Allerding sollte nicht unerwähnt bleiben, daß es vollkommen wurscht ist, ob es global oder lokal ist.

Sagt mal, was habt ihr denn alle geraucht ;-) ? Folgendes Programm kompiliert bei mir astrein. An den Bezeichnern seht ihr, daß es nur C-kompiliert (nicht C++-kompiliert) sein kann:

C++:
int operator (void) { return 1; }
int main (void)
{
  const int class = operator ();
  return 0;
}


*gebetsmühle*
Es funktioniert, weil class lokal in main ist und zur Laufzeit initialisiert wird, const hin oder her.
ao

Dieser Post wurde am 18.06.2003 um 23:40 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
19.06.2003, 08:19 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat:
ao postete

...
Folgendes Programm kompiliert bei mir astrein. An den Bezeichnern seht ihr, daß es nur C-kompiliert (nicht C++-kompiliert) sein kann:

C++:
int operator (void) { return 1; }
int main (void)
{
  const int class = operator ();
  return 0;
}




Mal langsam: Obiger Code ist C++ bzw versucht es zu sein. Jeder C Compiler spuckt, weil er (C Compiler) kein Operator overloading und keine Klassen kennt. Dein letztes Post legt nahe, daß Du unter C und C++ etwas anderes verstehst als ich und andere.


Zitat:

*gebetsmühle*
Es funktioniert, weil class lokal in main ist und zur Laufzeit initialisiert wird, const hin oder her.


Teils teils: in C hast Du recht, wie bereits ja schon erwähnt, in C++ eben nicht:

C++:
int f()
{
    return 2;
}

const int i = f();

int main()
{
    const int j = f();
}


Hier gibt es ein lokales j und ein globales i.
Wenn ich das mit einem C Compiler compilere, geht das mit dem i nicht, weil es in C nicht geht. Meine Gebetsmühle:

Zitat:

Bei beefy tut das deshalb nicht, weil er das als C Code übersetzt hat...


Hier sind wir uns ja auch einig.

Wenn ich das mit einem C++ Compiler compiliere, bekomme keinen Fehler. Meine Gebetsmühle:

Zitat:

...in C++ ist das, wie ao schon bemerkt hat, eine initialisierung und keine Zuweisung. Allerdings sollte nicht unerwähnt bleiben, daß es vollkommen wurscht ist, ob es global oder lokal ist.



[edit]

Zitat:
ao postete
Sagt mal, was habt ihr denn alle geraucht ;-)

Mein gefühl sagt mir, daß Du den Stoff auch mal probieren solltest
[tide]
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 19.06.2003 um 11:29 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
19.06.2003, 15:28 Uhr
~0xdeadbeef
Gast


Ich hab Bier geraucht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
19.06.2003, 22:46 Uhr
ao

(Operator)



Zitat:
virtual postete
Teils teils: in C hast Du recht, wie bereits ja schon erwähnt, in C++ eben nicht:

C++:
const int i = f();




Ich bin platt: das geht in C++ ja tatsächlich! Ich hätte geschworen, daß das nicht geht.

Aber der Code mit operator und class ist tatsächlich C. Habt ihrs probiert? Ich habe nie behauptet, daß da ein Operator überladen wird. Es wird eine Funktion definiert, die operator heißt; in C ist das kein Fehler. Außerdem wird eine Variable namens class deklariert, und das ist etwas, was nur in C geht.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
19.06.2003, 22:53 Uhr
ao

(Operator)


@karlnapf:
Der Thread hat sich ein bißchen von deinem Problem weg entwickelt, tut mir leid. Aber eins ist mir noch eingefallen:

Könnte es sein, daß dein Projekt aus mehreren Cpp-Dateien besteht und daß aus irgendeinem Grund (Makefile-Fehler?) nur einige davon neu übersetzt werden, wenn du h-Dateien änderst? Dann würdest du "neue" und "alte" Object-Files mischen, was beim Linken unter Umständen nicht auffällt, aber beim Laufenlassen die verrücktesten Dinge hervorrufen kann.

Du kannst das prüfen, indem du ein Clean-Rebuild machst (alle Object-Files löschen und das ganze Projekt neu bauen). Wenn das die Ursache ist, müßte der Absturz danach weg sein (vorausgesetzt, du hast nicht noch andere Fehler). Du mußt dann "nur" noch den Fehler im Makefile finden, der dazu führt, daß nicht alles richtig übersetzt wird.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
19.06.2003, 23:52 Uhr
virtual
Sexiest Bit alive
(Operator)


@ao

In C++ gibt es ja auch eine Notwendigkeit, daß es funktioniert: Dadurch, daß man erlaubt das man Objekte beliebegen Typs als globale Variablen schreiben kann, mußte man sich in C++ davon verabschieden, daß main der Eintrittspunkt in das Programm ist. Denn sobald ich eine globale Variable definiere, wie etwa

C++:
std::string MeinString ="ao";


wird der Konstruktor von MeinString bereits vor Erreichen von main aufgerufen. Die Sache mit dem const ist dann nur noch marginal. Wenn man wie in C darauf verzichten würde, daß Code vor main aufgerufen wird (natürlich wird davor Code ausgeführt, irgend ein StartupCode eben, der ist aber nicht standardisiert), müßte man in C++ bei globalen Variablen einige Einschränkungen hinnehmen. Mit globalen Variablen meine ich jetzt auch nicht nur die "bösen" Variablen, von denen man immer hört, das man sie vermeiden soll, sonderen eben auch die "guten" globalen Variablen, die ständig vorkommen:

C++:
class Klasse
{
    static std::string MeineGuteGlobaleVariable;
};


(Klassenattribute sind eben auch nur verkappte, etwas besonders gescopte, globale Variablen)
--
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 ] > 2 <     [ 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: