konkrete Inhaltsfragen

Moderator: Moderatoren

Timur
Beiträge: 92
Registriert: Di 22. Apr 2008, 23:02

Re: konkrete Inhaltsfragen

Beitrag von Timur » Sa 8. Nov 2008, 17:18

Hey vielen Dank :). Das ging wirklich schnell. Dann mal ans Werk^^.

Chris087
Beiträge: 296
Registriert: Mi 21. Mai 2008, 13:00

Re: konkrete Inhaltsfragen

Beitrag von Chris087 » So 23. Nov 2008, 17:47

Hallo Leute,
mal wieder ein Problem, was mich vor ein Rätsel stellt:
Diesmal gehts um Aufgabe 4.

Ich bekomme folgende Fehlermeldung beim Kompilieren:


------ Erstellen gestartet: Projekt: Aufgabenblock_2, Konfiguration: Debug Win32 ------
Kompilieren...
Fahrrad.cpp
d:\rwth aachen\visual studio 2005 professional\projects\strassenverkehr\aufgabenblock_2\weg.h(13) : error C2504: 'AktivesVO': Basisklasse undefiniert
Das Buildprotokoll wurde unter "file://d:\RWTH Aachen\Visual Studio 2005 Professional\Projects\Strassenverkehr\Aufgabenblock_2\Debug\BuildLog.htm" gespeichert.
Aufgabenblock_2 - 1 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========


Der Code an der betreffenden Stelle ist:

Code: Alles auswählen

#pragma once
#include "AktivesVO.h"
#include <list>

using namespace std;

class Fahrzeug;

typedef list<Fahrzeug*>FahrzeugListe;

class Weg :
	public AktivesVO
{
public:
	Weg(void);
... 
Der Anfang der AktivesVO.h:

Code: Alles auswählen

#pragma once

#include <iomanip>
#include <string>
#include <math.h>
#include <vector>
#include <list>
#include <ostream>
#include <iostream>
#include <sstream>

//#include "Weg.h"
#include "FzgVerhalten.h"

using namespace std;

extern double dGlobaleZeit;			// Einführung der globalen Uhr

class AktivesVO
{
public:
	AktivesVO(void);
... 
Warum dieser Fehler? Die Klasse Weg ist doch korrekt von der Klasse AktivesVO abgeleitet. Kann mir jemand helfen?

Benutzeravatar
[MD]
Beiträge: 389
Registriert: Mi 16. Apr 2008, 14:26

Re: konkrete Inhaltsfragen

Beitrag von [MD] » Mo 24. Nov 2008, 16:27

Wie sieht den deine Weg.cpp aus?? Vielleicht hast Du da einen Fehler, was dazu führt, dass er meckert, weil es in der weg.h anders aussieht...
Und hast Du die Datei vielleciht nicht ins Arbeitsverzeichnis kopiert, sondern aus einem anderen Verzeichnis einfach nur über projekt->vorhandenes element hinzufügen reingenommen??
Ciao [MD]

Chris087
Beiträge: 296
Registriert: Mi 21. Mai 2008, 13:00

Re: konkrete Inhaltsfragen

Beitrag von Chris087 » Mo 24. Nov 2008, 18:04

Dank schonmal für die Antwort! Die Dateien sind alle da!
Ich habs jetzt grad wieder mal durchgecheckt, aber ich kann den fehler nicht finden!

Hier mal meine Weg.cpp:

Code: Alles auswählen

#include "Weg.h"
#include "Fahrzeug.h"

// Standardkonstruktor
Weg::Weg(void)
{
}

Weg::Weg(string name, double laenge)
{
	p_sName = name;
	p_dLaenge = laenge;
	p_iID = p_iMaxID;
	p_iMaxID++;
}

// Destruktor
Weg::~Weg(void)
{
}

// Abfertigung aller Fahrzeuge auf dem Weg
void Weg::vAbfertigung()
{
	FahrzeugListe::iterator itL;
		
	for (itL=p_ptFahrzeuge.begin(); itL != p_ptFahrzeuge.end(); itL++)
	{
		(*itL)->vAbfertigung();
	}
}

// Ausgabefunktion 2 (per stream)
ostream& Weg::ostreamAusgabe(ostream& VOstream)
{	
	// String mit allen Fahrzeugnamen erstellen
	string Fahrzeuge = "(  ";

	FahrzeugListe::iterator itL;
		
	for (itL=p_ptFahrzeuge.begin(); itL != p_ptFahrzeuge.end(); itL++)
	{
		Fahrzeuge += ((*itL)->p_sName + "  ");
	}
	
	Fahrzeuge += "  )";		// In dem String sind nun alle Fahrzeugnamen

	return AktivesVO::ostreamAusgabe(VOstream)
    << setw(15) << p_dLaenge << setw(15) << Fahrzeuge << endl;
}

// Ausgabefunktion
void Weg::vAusgabe()
{
	AktivesVO::vAusgabe();
	cout << setw(5) << p_dLaenge << setw(5) << "(  ";

	// Fahrzeugnamen aus der Liste ausgeben
	FahrzeugListe::iterator itL;
		
	for (itL=p_ptFahrzeuge.begin(); itL != p_ptFahrzeuge.end(); itL++)
	{
		cout << (*itL)->p_sName << "  ";
	}

	cout << ")" << endl;
}


// Neues Fahrzeug in die Liste schreiben
/*void Weg::vAnnahme(Fahrzeug* fazg)
{
	if (p_ptFahrzeuge.empty());
	{
		p_ptFahrzeuge.push_back(fazg);
	}

	p_ptFahrzeuge.push_front(fazg);
}
*/

void Weg::vAnnahme(Fahrzeug* fazg)
{
	fazg->vNeueStrecke(this);
	p_ptFahrzeuge.push_back(fazg);
}

void Weg::vAnnahme(Fahrzeug* fazg, double startzeit)
{
	fazg->vNeueStrecke(this, startzeit);
	p_ptFahrzeuge.push_back(fazg);
}
und meine Weg.h mal komplett:

Code: Alles auswählen

#pragma once
#include "AktivesVO.h"
#include <list>

using namespace std;

class Fahrzeug;

typedef list<Fahrzeug*>FahrzeugListe;

class Weg :
	public AktivesVO
{
public:
	Weg(void);
	Weg(string name, double laenge);

	void vAnnahme(Fahrzeug* fazg);						// Fügt neues Fahrzeug in die Liste ein
	void vAnnahme(Fahrzeug* fazg, double startzeit);	// Fügt neues parkendes Fahrzeug ein

	virtual ~Weg(void);
	
	virtual ostream& ostreamAusgabe(ostream& VOstream);	// Ausgabefunktion 2 (per stream)

	virtual void vAusgabe();							// Ausgabe der aktuellen Wegdaten
	virtual void vAbfertigung();						// Abfertigung aller Fahrzeuge auf dem Weg
	
	double p_dLaenge;				// Länge des Weges

private:	
	FahrzeugListe p_ptFahrzeuge;	// Liste der Fahrzeuge, die sich auf dem Weg befinden


};
Wenn garnichts mehr geht frag ich die mittwoch beim termin..

Benutzeravatar
[MD]
Beiträge: 389
Registriert: Mi 16. Apr 2008, 14:26

Re: konkrete Inhaltsfragen

Beitrag von [MD] » Di 25. Nov 2008, 18:49

Warum sind eigentlich alle deine Weg-Funktionen virtuelle?? Von der Klasse Weg wird doch nichts mehr abgeleitet...
Irgendwie erschließt sich mir dein Fehler immer noch nicht ganz... Wenn Du möchtest, kannst Du mir den ganzen Code mal rüber schicken, dann guck ich mir den mal durch und versuche den Fehler zu finden.

p.S.: Was mir gerade aufgefallen ist: Sollte die ID-Vergabe nicht in die AktivesVO verlagert werden, da sonst bei jedem erzeugen eines Objektes die ID gleich um mehrere Stellen erhöht wird?? Bin mir dabei jetzt nicht mehr ganz sicher und finde mein Skript gerade auch nicht...
Ciao [MD]

midrantos
Beiträge: 170
Registriert: Sa 22. Mär 2008, 13:51

Re: konkrete Inhaltsfragen

Beitrag von midrantos » Di 25. Nov 2008, 23:53

Hallo,

ja sicher. Ansonsten treten doch Doppeltvergaben einer ID auf...

msg Florian

Chris087
Beiträge: 296
Registriert: Mi 21. Mai 2008, 13:00

Re: konkrete Inhaltsfragen

Beitrag von Chris087 » Do 27. Nov 2008, 18:44

Ok, also nachdem der Betreuer auch komplett ratlos war, und ich die Klassen mal kopiert und neu erstellt hab, kam immernoch nix bei rum. Dann wurde nochn Betreuer dazugerufen, und irgendwann kam der dann darauf, dass sich 2 Klassen bei mir gegenseitig includen, die das nicht dürfen! Welche es jetzt waren, kann ich nicht mehr sagen, weil er da sehr schnell und viel rumprobiert hat... der Fehler ist jedenfalls weg. Also immer drauf achten, Klassen nicht gegenseitig includen, sondern wenn Variablen von beiden gebraucht werden, nur mit "class xxx" bekannt machen...
Danke trotzdem für eure Hilfe!

midrantos
Beiträge: 170
Registriert: Sa 22. Mär 2008, 13:51

Re: konkrete Inhaltsfragen

Beitrag von midrantos » Sa 29. Nov 2008, 18:13

Richtig, das mit "class xxx" muss in der header-datei stehen und dazu müssen auch noch in den entsprechenden .cpp Dateien die entsprechenden Headerdateien dann richtig mit #include xxx.h eingebunden werden...

Ansonsten kommt es glaube ich zu ne Rekursion, weil die sich fortlaufend selbst aufrufen (beim Einbinden der einen in die andere).

testuesr
Beiträge: 2
Registriert: Mi 10. Dez 2008, 12:16

Re: konkrete Inhaltsfragen

Beitrag von testuesr » Mi 10. Dez 2008, 12:23

habe gesehn, dass viele schon fertig sind mit dem praktikum.

könnte davon einer sein programm hochladen, hänge an der ein oder anderen stelle noch.
Мои пять копеек

Sophia
Beiträge: 193
Registriert: Mo 2. Jun 2008, 17:24

Re: konkrete Inhaltsfragen

Beitrag von Sophia » Mi 10. Dez 2008, 13:09

Ich bin dagegen!

Bin zwar selbst erst bei Aufgabe 4 noch, aber habe mir aus Protest fest vorgenommen (sofern ich soweit komme) alles durchzuziehen und mein letztes Testat auch wirklich am letzten Termin zu machen.
Und danach nie wieder Infopraktikum.

Antworten

Zurück zu „Praktikum Informatik II“