Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Parameter an Basis-Klasse

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 ]
000
09.12.2007, 17:41 Uhr
FunnyDingo



Ich versuche gerade einen Parameter an eine Basis-Klasse zu übergeben. Das sollte ja so gehen:


C++:
SubClass()
  : BaseClass("value")


Ab was, wenn der Parameter für die Basis-Klasse ein Paramater des Konstruktors der abgeleiteten Klasse ist?

C++:
class tNPMHTTP : public tNPMBase, public tThreads
{
    private:
        int _ListenSocket;

    public:
        tNPMHTTP(tLogger *logger);
        ~tNPMHTTP();
        void listen();
        void send();
};


C++:
extern "C"
{
tNPMHTTP* getInstance(tLogger *logger)
{
    static tNPMHTTP inst(logger);
    return &inst;
}
}

Ich habe mal versucht, an den Konstruktor den aufruf des Basis-Klassen Konstruktors dran zu hängen:

C++:
tNPMHTTP(tLogger *logger)
  : tNPMBase(logger);

Aber dann bekomme ich ganz wirre Fehler beim kompilieren. Geht das denn überhaupt irgendwie!?
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.12.2007, 17:52 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


zeig die fehlermeldungen, weil so geht das normalerweise. du darfst da aber keinen ; hinmachen
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.12.2007, 18:05 Uhr
FunnyDingo



Ich nehme an, dass ; das ich weglassen soll ist hinter tNPMBase(logger). Somit sieht das nun so aus:

C++:
class tNPMHTTP : public tNPMBase, public tThreads
{
    private:
        int _ListenSocket;

    public:
        tNPMHTTP(tLogger *logger)
        : tNPMBase(logger)
        ~tNPMHTTP();
        void run();
};

(listen und send sind weggefallen);

Das ist der Fehler:

Code:
In file included from npm/http.cpp:17:
npm/http.h: In constructor ‘tNPMHTTP::tNPMHTTP(tLogger*)’:
npm/http.h:34: error: expected `{' before ‘~’ token
npm/http.cpp: At global scope:
npm/http.cpp:26: error: redefinition of ‘tNPMHTTP::tNPMHTTP(tLogger*)’
npm/http.h:32: error: ‘tNPMHTTP::tNPMHTTP(tLogger*)’ previously defined here
npm/http.cpp: In constructor ‘tNPMHTTP::tNPMHTTP(tLogger*)’:
npm/http.cpp:26: error: no matching function for call to ‘tNPMBase::tNPMBase()’
npm/../core/network.npm.base.h:26: note: candidates are: tNPMBase::tNPMBase(tLogger*)
npm/../core/network.npm.base.h:21: note:                 tNPMBase::tNPMBase(const tNPMBase&)
npm/http.cpp: At global scope:
npm/http.cpp:86: error: definition of implicitly-declared ‘virtual tNPMHTTP::~tNPMHTTP()’
make: *** [npm/http.so] Error 1

--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
09.12.2007, 18:08 Uhr
Kest
saint



C++:
class tNPMHTTP : public tNPMBase, public tThreads
{
    private:
        int _ListenSocket;

    public:
        tNPMHTTP(tLogger *logger)
        : tNPMBase(logger) {}
        ~tNPMHTTP();
        void run();
};

--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
09.12.2007, 18:11 Uhr
FunnyDingo



Geht auch nicht.

Code:
npm/http.cpp:26: error: redefinition of ‘tNPMHTTP::tNPMHTTP(tLogger*)’
npm/http.h:32: error: ‘tNPMHTTP::tNPMHTTP(tLogger*)’ previously defined here
npm/http.cpp: In constructor ‘tNPMHTTP::tNPMHTTP(tLogger*)’:
npm/http.cpp:26: error: no matching function for call to ‘tNPMBase::tNPMBase()’
npm/../core/network.npm.base.h:26: note: candidates are: tNPMBase::tNPMBase(tLogger*)
npm/../core/network.npm.base.h:21: note:                 tNPMBase::tNPMBase(const tNPMBase&)
make: *** [npm/http.so] Error 1


Oder ist an der Definition des tNPMHTTP-Konstruktor was falsch (http.cpp:26)?

C++:
tNPMHTTP::tNPMHTTP(tLogger *logger)
{
...
}

Eigentlich nicht, oder?
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de

Dieser Post wurde am 09.12.2007 um 18:13 Uhr von FunnyDingo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
09.12.2007, 18:14 Uhr
Kest
saint


Du hast >tNPMHTTP::tNPMHTTP(tLogger*)< bereits in der Klasse definiert:

C++:
tNPMHTTP(tLogger *logger)
        : tNPMBase(logger) {}


Also weg mit
C++:
tNPMHTTP::tNPMHTTP(tLogger *logger)
{
...
}

oder mit
C++:
tNPMHTTP(tLogger *logger)
        : tNPMBase(logger) {}



So

C++:
class tNPMHTTP : public tNPMBase, public tThreads
{
    private:
        int _ListenSocket;

    public:
        tNPMHTTP(tLogger *logger)
         : tNPMBase(logger) {}
        ~tNPMHTTP(){}
        void listen(){}
        void send(){}
};


oder so
C++:
class tNPMHTTP : public tNPMBase, public tThreads
{
    private:
        int _ListenSocket;

    public:
        tNPMHTTP(tLogger *logger);
        ~tNPMHTTP();
        void listen();
        void send();
};

tNPMHTTP::tNPMHTTP(tLogger *logger)
: tNPMBase(logger) {}

tNPMHTTP::~tNPMHTTP() {}
void tNPMHTTP::listen() {}
void tNPMHTTP::send() {}

--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.

Dieser Post wurde am 09.12.2007 um 18:21 Uhr von Kest editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
09.12.2007, 18:23 Uhr
FunnyDingo



OK, jetzt verstehe ich es. Hab zwei Definitionen. Der Konstruktor in der CPP beinhaltet viel Code um das Objekt zu intialisieren. Das möchte ich nur ungern in der HeaderDatei verschieben. Ich habe den Aufruf der Basis-Klasse mit dem Parameter nun in die CPP gepackt und er kompiliert.

Sollte ja auch OK sein, oder?
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
11.12.2007, 15:26 Uhr
stephanw
localhorst


Ironie-Modus
{
Vielleicht liegt es ja auch an den Klassennamen wie tNPMHTTP", da kriegt man ja Augenkrebs
}
--
Reden ist Schweigen und Silber ist Gold.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
11.12.2007, 19:00 Uhr
FunnyDingo



Hm, vielleicht wäre tnpmHTTP doch etwas angenehmer? oder tNpmHttp? Hm, mal drüber nachdenken...
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
11.12.2007, 19:31 Uhr
0xdeadbeef
Gott
(Operator)


Ich würde

C++:
namespace npm {
  class http {
  // ...
  };
}


vorschlagen, denn du hast scheinbar viele Klassen mit diesem Präfix - das macht es in meinen Augen zu einem Namensraum.

Ansonsten würde ich noch anmerken, dass die extern "C"-Deklaration da ziemlich wenig bringen dürfte, weil du einen C++-Typ zurückgibst.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 11.12.2007 um 19:34 Uhr von 0xdeadbeef editiert.
 
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: