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

11

23.07.2015, 21:58

Jetzt leider:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void Haupt (Preisentwicklung P)
{ ... }

int main()
{
   struct Preisentwicklung
   {
       ...
   };

   // Instanz erstellen
   Preisentwicklung P; // Name ist egal

   ...
   Haupt (P);
   ...
}


Meldet mir der compiler, dass die Funktion als 'void' deklariert wurde. Und dass Preisentwicklung nicht deklariert wurde.

Irgendwo beisst sich was... an sich ist doch struct in der main deklariert und die Haupt ist eine untergeordnete Funktion, allerdings liefert eine void doch keinen RÜckgabewert?

Hmm... da ist was, was ich nicht kenne, wäre für HIlfe sehr dankbar.

12

23.07.2015, 22:03

Du kannst dein Code so lassen wie du ihn (oben) gepostet hast nur must halt innerhalb von haupt() eine Instanz des Structs erzeugen.


Edit: Übrigens
Meldet mir der compiler, dass die Funktion als 'void' deklariert wurde. Und dass Preisentwicklung nicht deklariert wurde.


Wenn du diesen Aufbau hast:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void Haupt (Preisentwicklung P)
{ ... }

int main()
{
   struct Preisentwicklung
   {
       ...
   };

   // Instanz erstellen
   Preisentwicklung P; // Name ist egal

   ...
   Haupt (P);
   ...
}


Kann die Funnktion Haupt das Struct gar nicht kennen, weil es nur innerhalb von Main bekannt ist.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Koschi« (23.07.2015, 22:26)


m3xx

Alter Hase

Beiträge: 434

Beruf: Student

  • Private Nachricht senden

13

24.07.2015, 00:05

Hab dein zweites Problem mal schnell überflogen. Kann es sein, dass Haupt noch woanders genutzt wird? Wenn ja, hast du einen Funktionsprototypen für Haupt?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

14

24.07.2015, 06:35

Mit Prototyp hat das nichts zu tun. Wie Koschi schon sagte, das Struct ist in Haupt definiert und daher auch nur dort bekannt. Statt eine neue Instanz zu erzeugen, hat er die Datentyp-Definition da rein geschoben. Das geht natürlich nicht.
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]

herzogRed

Frischling

Beiträge: 15

Wohnort: Leipzig

  • Private Nachricht senden

15

24.07.2015, 12:02

Hi,

Mal ne Frage.
Hast du eigentlich gleich drauf los geschrieben und hoffst es wird schon gehen?
Ich bin noch am Anfang, aber bei den Übungen im Buch sollen wir immer erst mal ein grundgerüst bauen um zu schauen ob es geht.
Wenn das funzt dann Stück für Stück die Funktionen hinzufügen. Dann erst die nächste schreiben.
Für Anfänger ist das bestimmt ne gute Lösung, für fehlereingrenzung.
Es sieht auch aus als ob du alles global gehalten hast, ohne Prototypen. Aber da kenne ich mich noch zu wenig aus.

m3xx

Alter Hase

Beiträge: 434

Beruf: Student

  • Private Nachricht senden

16

24.07.2015, 14:35

Mit Prototyp hat das nichts zu tun. Wie Koschi schon sagte, das Struct ist in Haupt definiert und daher auch nur dort bekannt. Statt eine neue Instanz zu erzeugen, hat er die Datentyp-Definition da rein geschoben. Das geht natürlich nicht.


Oh klar... Wo du das jetzt so sagst, sehe ich das auch.
Habe aber mal ne stilistische Frage zu C. Jetzt wo man so grade bei structs ist. Ich muss zugeben, dass wir uns während des Studiums sehr minimal nur mit header-Dateien beschäftigt haben (liegt daran, dass wir C nur ein halbes Semester hatten, wir nutzen hauptsächlich Java). Werden structs in die .c-Datei oder doch einen Header geschrieben?

Tobiking

1x Rätselkönig

  • Private Nachricht senden

17

24.07.2015, 15:01


Habe aber mal ne stilistische Frage zu C. Jetzt wo man so grade bei structs ist. Ich muss zugeben, dass wir uns während des Studiums sehr minimal nur mit header-Dateien beschäftigt haben (liegt daran, dass wir C nur ein halbes Semester hatten, wir nutzen hauptsächlich Java). Werden structs in die .c-Datei oder doch einen Header geschrieben?

Wie immer bei Stilfragen gibt es da kein Schwarz oder Weiß. Wird das struct in mehreren Modulen verwendet, macht es Sinn es in den Header zu schreiben, damit es durch Inkludieren bekannt gemacht wird. Wenn es aber ein kleines struct ist, von dem nur eine einzige Instanz erzeugt wird, die zudem nur sehr lokal verwendet wird, wird man es vermutlich dort hinschreiben wo man es verwendet.

18

24.07.2015, 21:35

Also ich schreibe structs und Klassen fast immer in den Header. Da finde ich die dann auch, auch wenn die Header dadurch ziemlich groß werden (teilweise ca. 500 Zeilen).
Cube Universe
Entdecke fremde Welten auf deiner epischen Reise durchs Universum.

Korowai

unregistriert

19

25.07.2015, 13:29

Lösung 1

Habe Eure VOrschläge anhand meiner BÜcher verifiziert und die Lösung in der Grundstruktur sieht so aus:

Quellcode

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 <iostream>
#include <string>
#include <conio.h>
using namespace std;

struct Preisentwicklung
{
    int Zufall;
    int Steigerung;
    int Senkung;
    float Wertentwicklung;
    float Planetpreis;
    string Boerse;
    float Kauf;
    int Warenart;

};

Preisentwicklung GebeDaten(Preisentwicklung);
void ZeigeDaten(Preisentwicklung);

int main()
{

Preisentwicklung RestonaGuldon;

    RestonaGuldon.Planetpreis=5;
    cout << " Vor der Funktion: " << RestonaGuldon.Planetpreis;

RestonaGuldon= GebeDaten(RestonaGuldon);
ZeigeDaten(RestonaGuldon);

cout << endl;
cout << " Nach der Funktion in main: " << RestonaGuldon.Planetpreis;


    return 0;
}

Preisentwicklung GebeDaten(Preisentwicklung RestonaGuldon1)
{

RestonaGuldon1.Planetpreis= 10,0.f;
cout << endl << "In der Funktion: " << RestonaGuldon1.Planetpreis<< endl;

return RestonaGuldon1;
}

void ZeigeDaten (Preisentwicklung RestonaGuldon1)
{
    cout << endl;
    cout << " Nach der Funktion: " << RestonaGuldon1.Planetpreis << endl;
}


Nochmal DAnke für die Denkanstösse. Jetzt schaue ich mal wie ich das implementiere.

Nachtrag: Kann mir jemand vorab sagen, ob das in einer Endlosschleife auch funktioniert?

20

25.07.2015, 19:58

Geht mit Sicherheit auch in einer Endlosschleife.

Paar Tips hätte ich noch:

- const verwenden
- Referenzen/Pointer verwenden
- bei der Funktion Preisentwicklung GebeDaten(Preisentwicklung RestonaGuldon1) z.B. würde es auch ausreichen wenn du nur einen float Parameter übergibst und die Funktion einen float zurück gibt.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Werbeanzeige