amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > C++ Inline Konstruktoren/Destruktoren [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

14.05.2005, 11:42 Uhr

Reth
Posts: 1858
Nutzer
Hallo allerseits,

ich bin noch ein blutiger C++ Anfänger, habe bisher nur einigermaßen C und exzessiv JAva programmiert.

Nun habe ich folgendes Problem.

Ich habe 2 Headerdateien zu denen keine *.cc Dateien exisitieren:

MenusC.h

C/C++ Code:
#ifndef MENUS_H
#define MENUS_H

#include <list>

#include "MenuC.h"

class MenusC
{
public:
MenusC() {}
~MenusC() {}

void addMenu(MenuC& menu) { menus.push_back(menu); };

private:
list<MenuC> menus;

};

#endif


und MenuC.h:

C/C++ Code:
#ifndef MENU_H
#define MENU_H

#include <list>
#include <typeinfo>

#include "MenuEntryC.h"
#include "MenuTitleC.h"
#include "MenuItemC.h"
#include "MenuSeperatorC.h"

class MenuC
{
public:
MenuC() {}
~MenuC() {}

void setTitle(MenuTitleC& menuTitle)
{
// Am Anfang der Liste steht immer der Menütitel!
if (typeid(entries.pop_front()) == typeid(MenuTitleC))
{
entries.pop_front();
}
entries.push_front(menuTitle);
};
void addItem(MenuItemC& menuItem) { entries.push_back(menuItem); };
void addSeperator(MenuSeperatorC& menuSeperator) { entries.push_back(menuSeperator); };

private:
list<MenuEntryC> entries;

};

#endif

In der Klasse mit der Main-Methode steht nun folgendes:

C/C++ Code:
#include "MenuC.h"
#include "MenusC.h"
.
.
.
MenusC menus;
MenuC file;
.
.
.

Ich verwende GCC 3.3 und g++ bringt nun folgende Fehler:

undefined reference to 'MenusC::~MenusC(void)'
undefined reference to 'MenuC::~MenuC(void)'
undefined reference to 'MenusC::MenusC(void)'
undefined reference to 'MenuC::MenuC(void)'
undefined reference to 'MenuC::~MenuC(void)'
undefined reference to 'MenusC::~MenusC(void)'

Woran liegt das? Brauche ich immer *.cc Dateien, die mit diesen *.h Dateien compiliert und gelinkt werden, bevor sie woanders verwendet werden können?

In anderen Klassen, die hier z.T. Verwendung finden (MenuItemC, MenuSeperatorC) befinden sich ebenfalls inline Destruktoren. Zu diesen Klassen exisiteren *.cc Dateien und es werden Objectdateien erzeugt. Außer bei einer bekomme ich die o.a. Fehlermeldungen für diese Klassen aber nicht!
Bei Bedarf kann ich deren Code auch noch posten!

Da blick ich nicht durch!

Kann mir jmd. nen Tip geben?

Vielen Dank schon einmal!

Ciao

[ - Antworten - Zitieren - Direktlink - ]

14.05.2005, 14:50 Uhr

thomas
Posts: 7717
Nutzer

Versuchs mal mit MenuC(void){} und ~MenuC(void){}. Immerhin meckert er ja MenuC::MenuC(void) an und nicht MenuC::MenuC().

Gruß Thomas


--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

14.05.2005, 14:56 Uhr

Reth
Posts: 1858
Nutzer
Zitat:
Original von thomas:

Versuchs mal mit MenuC(void){} und ~MenuC(void){}. Immerhin meckert er ja MenuC::MenuC(void) an und nicht MenuC::MenuC().

Gruß Thomas



Danke für den Tip, ist aber ne ungewöhnliche Schreibweise für Konstruktoren/Destruktoren, oder?

Bei meinen anderen Klassen, die jedoch alle aus *.h und *.cc bestehen, sind die Defaultkonstruktoren/-destruktoren nie mit void als Parameter spezifiziert. Einige dieser Klassen haben inline Destruktoren in ihren Headern und nicht-Defaultkostruktoren in den *.cc Dateien.

Bin mal gespannt, was der Compiler sagt, wenn ich void eintrage!

Ciao René

[ Dieser Beitrag wurde von Reth am 14.05.2005 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

14.05.2005, 17:17 Uhr

Reth
Posts: 1858
Nutzer
Zitat:
Original von thomas:

Versuchs mal mit MenuC(void){} und ~MenuC(void){}. Immerhin meckert er ja MenuC::MenuC(void) an und nicht MenuC::MenuC().

Gruß Thomas


Die Fehlermeldungen bleiben weiterhin dieselben.

Ciao

[ - Antworten - Zitieren - Direktlink - ]

14.05.2005, 18:29 Uhr

Reth
Posts: 1858
Nutzer
Problem gelöst.

Die Klasse, welche MenuC.h und MenusC.h verwendete wurde von mir versehentlich im makefile auskommentiert, so dass ein altes Objectfile verwendet wurde!

Nun tut es.

Danke und bis zum nächsten Mal

Ciao

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > C++ Inline Konstruktoren/Destruktoren [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.