Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Korowai

unregistriert

1

13.11.2016, 13:18

c++ Komposition

Ich habe eine Fehlermeldung, für die ich keine Lösung finde:

Sie sagt mir, dass die Variablen von der zugefügten Klasse (Mobilbericht) durch die obere Klasse (Bericht) nicht gefunden werden.
Irgendwas ist falsch an den Konstruktoren, ich komme nicht darauf, was...

Bericht.h:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#ifndef BERICHT_HPP_INCLUDED
#define BERICHT_HPP_INCLUDED
#include <vector>
#include <iostream>
#include "MobilBericht.hpp"
class Bericht
{

public:

int Ersteller;
int RundebisVerfall;
int Erstellbasisnummer;
int Berichtnummer;

Mobilbericht cMobilBericht;

    Bericht ();
    ~Bericht();

};


#endif // BERICHT_HPP_INCLUDED


Bericht.cpp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>

#include "Bericht.hpp"
#include "MobilBericht.hpp"

using namespace std;

Bericht::Bericht() : BerichtMobilart(), BerichtMobilstandort(), BerichtMobilziele() //Hier meckert der compiler
{


}

Bericht::~Bericht()
{

}
[cpp]
Mobilbericht.hpp:
[cpp]
#ifndef MOBILBERICHT_HPP_INCLUDED
#define MOBILBERICHT_HPP_INCLUDED
#include <vector>
#include <iostream>
class Mobilbericht
{

public:

    int BerichtMobilart;
    int BerichtMobilstandort;
    int BerichtMobilziele;
};

#endif // MOBILBERICHT_HPP_INCLUDED


Mobilbericht.cpp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "Mobilbericht.hpp"
#include "Bericht.hpp"

using namespace std;

Mobilbericht::Mobilbericht()
{
BerichtMobilart=0;
    BerichtMobilstandort=0;
    BerichtMobilziele=0;

}

Mobilbericht::~Mobilbericht()
{

}

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

13.11.2016, 13:45

Was sagt denn der Compiler? Die genaue Fehlermeldung, bitte!

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

3

13.11.2016, 14:33

Du willst in der Initialisierungsliste von Bericht Variablen zuweisen die in Bericht nicht vorhanden sind. Diese sind nur in Mobilbericht vorhanden. Komposition ist an sich kein Hexenwerk. Das einzige was es bedeutet ist dass eine Sache A eine Sache B hat. In deinem Fall hat ein Bericht einen Mobilbericht. Klingt das für dich sinnvoll? Versuch dir für den Anfang immer zu überlegen was in der Realität der Fall ist. In den meisten Fällen wirst du damit schon richtig liegen. Welche Möglichkeiten gibt es?
Ein Bericht hat einen Mobilbericht.
Ein Mobilbericht hat einen Bericht.
Ein Bericht ist ein Mobilbericht.
Ein Mobilbericht ist ein Bericht.
Welche der vier Möglichkeiten klingt für dich logisch? Unabhängig davon solltest du dennoch deinen aktuellen Fehler suchen und finden. Einfach damit du beim nächsten mal weißt was das Problem ist wenn so etwas auftaucht.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

4

13.11.2016, 19:21

Gabs den gleichen Thread nicht schon vor 3 Tagen?

5

14.11.2016, 14:29

Gabs den gleichen Thread nicht schon vor 3 Tagen?

Da wurde nach Polymorphi gefragt und ich glaub es wurde Komposition empfohlen für das dortige Beispiel.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

6

14.11.2016, 14:40

Gabs den gleichen Thread nicht schon vor 3 Tagen?

Wie Koschi sagt. Hier der Thread.
https://www.spieleprogrammierer.de/18-c-…morphie-vector/
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Korowai

unregistriert

7

14.11.2016, 19:51

Ja, den gab es. Dort wurde über Polymorphie gesprochen, bis Komposition ins GEspräch kam.

Ich stelle mal ein, was ich wollte und wie ich es gelöst habe. Vielleicht hilft es anderen weiter, die vielleicht mal eine schnelle Lösung brauchen...

main:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <vector>
#include <iostream>
#include "MobilBericht.hpp"
#include "Bericht.hpp"

using namespace std;

Mobilbericht cMobilbericht;
Bericht cBericht (Mobilbericht());

std::vector<Mobilbericht> vBerichte;

int main()
{
    int Standort;
    int Ziel;
    int Art;
    int Anzahl;
    int Ausgabe;
    cout << "Wieviele Mobile?" << endl;
    cin>>Anzahl;
    cout << endl;
    for (int y=0;y<Anzahl;y++)
    {
    vBerichte.push_back(Mobilbericht());
    };
    for (int x=0;x<vBerichte.size();x++)
    {
    cout << "Dateneingabe" << endl;
    cout << "Standort 1-4? ";
    cin >> Standort; cout <<endl;
    cout << "Dateneingabe" << endl;
    cout << "Ziel 1-4? ";
    cin >> Ziel; cout << endl;
    cout << "Dateneingabe" << endl;
    cout << "Mobilart 1-4? ";
    cin >> Art; cout <<endl;
        vBerichte[x].BerichtMobilart=Art;
        vBerichte[x].BerichtMobilstandort=Standort;
        vBerichte[x].BerichtMobilziele=Ziel;
    }
    cout << "Berichte erstellt"<<endl;
    cout << endl;
    cout << "Welchen Bericht wollen Sie sehen?";
    cout <<endl;
    cout << "1 bis " << Anzahl << " ? ";
    cin >> Ausgabe;
    cout << endl;
    cout << vBerichte[Ausgabe-1].BerichtMobilart << " ist die Art des Mobils"<<endl;
    cout << vBerichte[Ausgabe-1].BerichtMobilstandort << " ist der Standort" <<endl;
    cout << vBerichte[Ausgabe-1].BerichtMobilziele << " ist das Ziel" << endl;
    return 0;
}

Bericht.h:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#ifndef BERICHT_HPP_INCLUDED
#define BERICHT_HPP_INCLUDED
#include <vector>
#include <iostream>
#include "MobilBericht.hpp"
class Bericht
{

public:

int Ersteller;
int RundebisVerfall;
int Erstellbasisnummer;
int Berichtnummer;

    Bericht ();
    ~Bericht();


Mobilbericht cMobilBericht;
};
#endif // BERICHT_HPP_INCLUDED


Bericht.cpp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "MobilBericht.hpp"

using namespace std;

Bericht::Bericht()
{


}

Bericht::~Bericht()
{

}


Mobilbericht.hpp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#ifndef MOBILBERICHT_HPP_INCLUDED
#define MOBILBERICHT_HPP_INCLUDED
#include <vector>
#include <iostream>
class Mobilbericht
{

public:

    Mobilbericht();
    ~Mobilbericht();

    int BerichtMobilart;
    int BerichtMobilstandort;
    int BerichtMobilziele;

};

#endif // MOBILBERICHT_HPP_INCLUDED


Mobilbericht.cpp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "Mobilbericht.hpp"
#include "Bericht.hpp"

using namespace std;

Mobilbericht::Mobilbericht()
{
BerichtMobilart=0;
    BerichtMobilstandort=0;
    BerichtMobilziele=0;

}

Mobilbericht::~Mobilbericht()
{

}

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

8

14.11.2016, 19:59

Wie bereits gesagt. Jetzt hat ein Bericht einen Mobilbericht. Dabei ist ein Mobilbericht ein Bericht. Dir wurde vorher von Vererbung abgeraten weil du da in deinem Code ausgedrückt hast dass ein Auto ein Bericht ist. Ein Auto ist kein Bericht, ein Bericht kann aber von einem Auto handeln, das Auto also somit kennen oder zumindest Informationen über das Auto besitzen.
Brauchst du überhaupt die Unterscheidung zwischen Bericht und Mobilbericht?
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

14.11.2016, 20:03

Die ganzen Integer für "Art" und "Ziel" z.B. sind sicherlich auch besser durch sprechende Enums zu ersetzen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Korowai

unregistriert

10

14.11.2016, 20:41

Ja, brauche ich ;)

Das vorliegende ist nur das Testprogramm, um zu verstehen. Ich denke, in einer Anwendung wird es dann anders aussehen... mit dem Eingeständnis, dass ich keinen Plan habe, was Du mit Enums meinst, ich aber nachvollziehen, kann, was gemeint ist, wird das vielleicht auch mal Thema werden.

Werbeanzeige