Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Methodenaufruf

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
17.12.2004, 10:27 Uhr
~Wilson
Gast


Hallo zusammen,

ich habe in c++ das problem, dass ich keine methode aus einer methode aufrufen kann, die im sourcecode weiter unten steht.

Z.B.:

void method1(...){
...
method2(...) //methodenaufruf
}

void method2(...){
...
}

Der Compiler kommt mir mit einer Fehlermeldung: method2: redefinition; different basic types
Das kann doch net sein. In Java macht der das doch auch problemlos...
Wer hilft?

Gruß
Wilson
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.12.2004, 10:43 Uhr
virtual
Sexiest Bit alive
(Operator)


Nein, die Reihenfolge ist nicht das Problem. Das Problem ist - wie auch der text der Fehlermeldung nahelegt - daß du den Namen method2 einerseits als Methodennamen, andererseits für was anderes, möglicherweise eine Instanzvariable benutzt.
--
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
002
17.12.2004, 10:46 Uhr
Th



C++ analysiert eine Datei immer von oben nach unten, d.h. wenn du auf method2 von method1 zugreifen willst, mußt du vorher method2 deklarieren (definieren kannst du es später, sogar in einer anderen Datei, die dann vom Linker zusammengebunden wird).

Also

C++:
void method2(...); // Deklaration

void method1(...)
{
...
method2(...) //methodenaufruf
}

void method2(...) // Definition
{
...
}



Wenn du von method2 auf method1 zugreifen willst, kannst du das einfach machen, da eine Definition automatisch eine Deklaration beinhaltet.

Am besten, du deklarierst alle Methodenaufrufe in einer Headerdatei und bindest sie dann mit

C++:
#include "Datei.h"


ein.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.12.2004, 11:13 Uhr
virtual
Sexiest Bit alive
(Operator)


@Th
ist wirklich nicht das Problem:

C++:
struct ClassA {
   void method1() {
       method2();
   }
   void method2() {
   }
};


Sollte Durch den Compiler gehen. Wenn nicht, dann nimm bitte einen ANSI C++ Compiler: Für Methoden, die in der Klasse nicht nur deklariert, sondern auch definiert werden gilt nicht die strenge Point-of-Declaration Regel, welche Du da wohl im Sinn hast. Defacto bedeutet das, daß man mit Inline methoden auch auf Members zugreifen kann, die erst nach der Methode selbst definiert wurden:

C++:
struct ClassB {
   void init() {
       c = 0;
    }

    char c;
};


ist auch legal. Da dies aber eben für einen C gewöhnten Programmierer eher eine Verwirrung darstellt, wird in der einschlägigen Literatur diese Vorgehensweise nicht empfohlen, sondern eher:

C++:
struct ClassB {
   void init();

    char c;
};

inline void ClassB::init() {
    c = 0;
}


Nichtsdestotrotz: das ist überhaupt nicht das Problem: der Originalposter hat das Problem, daß der Compiler über eine Redefinition meckert, also method2 als Bezeichner zwei konkurrierender Definitionen kennt.
--
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
004
17.12.2004, 11:26 Uhr
~Wilson
Gast


Vielen Dank. Warum ich eine redefinition Fehlermeldung des Compilers bekam ist mir jetzt völlig unklar...
Habe die Variante von Th probiert und es funktioniert jetzt.
Vielleicht sollte ich in diesem Zusammenhang sagen, dass ich in opengl programmiere und die methoden alle "klassenlos" sind.

Gruß
Wilson
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
17.12.2004, 11:30 Uhr
virtual
Sexiest Bit alive
(Operator)


@Wilson:

Witzbold: Dann sag doch nicht "Methode", sondern "Funktion", denn unter einer "Methode" versteht man nun mal etwas, was zu einer Klasse gehört. Hier gilt dann auch die Regel, die Th nannte.
--
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
006
17.12.2004, 12:10 Uhr
(un)wissender
Niveauwart


Na virtual, ich glaube nicht, dass das Absicht war.
Ich z. B. nenne auch Klassen-"Funktionen" Methoden und freistehende Funktionen nur Funktionen, aber ich weiß nicht, ob das allgemiengültig ist. Habe es auch schon andere gesehen.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
17.12.2004, 12:26 Uhr
virtual
Sexiest Bit alive
(Operator)


@/un)wissender
Doch kann man schon sagen, daß das allgemeingültig ist. Ist ja auch nicht weiter tragisch - das Problem scheint ja nun gelöst zu sein.
--
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: