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

07.08.2015, 15:46

Programmstruktur header mit struct

Hallo, da bin ich mal wieder mit einer Frage.

Ich möchte folgende Struktur in meinem Programm aufbauen:

EIn Header, der einen STruct enthält. = 1
Ein Header, der drei Berechnungsfunktionen deklariert = 2
Die davon abhängigen cpp Files, in denen 1a) der struct erzeugt und 2a) die Funktionen beschrieben sind.

Nun durchläuft das Programm die main () und stösst auf eine void Funktion, die in ihrem Verlauf sowohl den struct 1 und die Funktionen 2 aufruft.

Wie muss ich Deklarationen definieren, damit das hinhaut. D.h. was muss ich in jeweiligen 1a / 1b/ 2a/ 2a Schnittstellen, was in der void Funktion schreiben, damit ich nicht Fehlermeldungen erhalte...

Momentan krebst das alles in der main.cpp herum, und ich wollte aufräumen...
Wenn nötig, poste ich gerne die betreffenden Ausschnitte des Chaos ;)

2

07.08.2015, 17:06

Moin,


tut mir leid, diese Frage stellen zu müssen, aber hä?

Lies mal deinen Text unter der Prämisse durch, dass du nicht weisst, wovon du schreibst und versuch mal zu verstehen was du fragen willst :)

Ich versuchs mal trozdem:

Um die Implementierungen (die .c/.cpp files )brauchst du dir keine Sorgen zu machen. Das erledigt der Linker für dich.

Mit #include kannst du dann deine Definitionen in den .c Dateien bekannt machen.

Da du ja nicht geschrieben hast, was genau den Problem ist, such mal im Netz nach "include guards". Das wird sicherlich ein Thema für dich sein.

Korowai

unregistriert

3

07.08.2015, 18:28

Äh, mein Problem ist dass ich nicht weiß, welcher code an welcher STelle stehen muss damit der compiler versteht, was ich meine.

Meine Kenntnisstands zufolge müßte das so aussehen?:

Header Preisentwicklung.hpp

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#ifndef PREISENTWICKLUNG_HPP_INCLUDED
#define PREISENTWICKLUNG_HPP_INCLUDED

using namespace std;
#include <string>

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

} Berechnung;


Preisentwicklung.cpp

Quellcode

1
2
3
4
5
6
7
8
9
#include "Preisentwicklung.hpp"
#include "Markt.hpp"


Preisentwicklung Berechnung2;

Preisentwicklung GebePreise(Berechnung);

Preisentwicklung GebePreise(Berechnung2);


Dann noch Header Markt.hpp

Quellcode

1
2
3
4
5
6
7
8
9
10
11
#ifndef MARKT_HPP_INCLUDED
#define MARKT_HPP_INCLUDED

using namespace std;

float Preisabfrage(float Kostenniveau);
float Deflationsabfrage(float Deflation);
float Inflationsabfrage(float Inflation);


#endif // MARKT_HPP_INCLUDED



DAzu MArkt.cpp:

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
#include "Markt.hpp"
#include "Preisentwicklung.hpp"




float Preisabfrage(float Kostenniveau)
{

    int Preishoch=0;
    int Preisrunter=0;
    float Kostenentwicklung=0;
    srand (time(NULL));
    Kostenentwicklung= rand()%99+1;

    Preishoch=rand()%99+1;

    Preisrunter=rand()%99+1;
    if (Kostenentwicklung<=25)
    {
        if (Preisrunter<=35)
        {
            Kostenniveau=0,95;

        }
        else if (Preisrunter<65&&Preisrunter>35)
        {
            Kostenniveau=0,9;

        }
        else if (Preisrunter>=65&&Preisrunter<=85)
        {
            Kostenniveau=0,85;

        }
        else if (Preisrunter>85&&Preisrunter<=95)
        {
            Kostenniveau=0,8;

        }
        else
        {
            Kostenniveau=0,75;

        }

    }
    else if (Kostenentwicklung>=75)
    {
        if (Preishoch<=35)
        {
            Kostenniveau=1,05;

        }
        else if (Preishoch>=36&&Preishoch<=64)
        {
            Kostenniveau=1,1;

        }
        else if (Preishoch>=65&&Preishoch<=85)
        {
            Kostenniveau=1,15;

        }
        else if (Preishoch>=86&&Preishoch<=95)
        {
            Kostenniveau=1,2;

        }
        else
        {
            Kostenniveau=1,25;

        }
    }
    else
    {
        Kostenniveau=1;

    }



return(Kostenniveau);
}

float Deflationsabfrage(float Deflation)
{
    int Kostenentwicklung;
    srand (time(NULL));
    Kostenentwicklung= rand()%99+1;

    if (Kostenentwicklung<25)
    {
        Deflation=2;
    }
    else if (Kostenentwicklung>=25&&Kostenentwicklung<75)
    {
        Deflation=1;
    }
    else
    {
        Deflation=3;
    }
    return (Deflation);
}

float Inflationsabfrage(float Inflation)
{
    int Preishoch=0;
    int Preisrunter=0;
    int Kostenentwicklung=0;
    srand (time(NULL));
    Kostenentwicklung= rand()%99+1;

    if (Kostenentwicklung <25)
    {
        Inflation=2;
    }
    else if (Kostenentwicklung>=25&&Kostenentwicklung<75)
    {
        Inflation=1;
    }
    else
    {
        Inflation=3;
    }
    return (Inflation);

}

Preisentwicklung GebePreise(Berechnung)
{



int Preischance;
srand (time(NULL));
Preischance=rand()%99+1;
if (Preischance>50)
{
    float Deflationsabzug;
    float Inflationsabzug;
    Preisabfrage(Kostenniveau);
    Deflationsabfrage(Deflation);
    Inflationsabfrage(Inflation);

    if (Deflation==2)
    {
        srand (time(NULL));
    Deflationsabzug= rand()%99+1;
    Markt1.Senkung=Deflation*Deflationsabzug/100;
    };
    if (Deflation==1)
    {
        Markt1.Senkung=1;
    };
    if (Deflation==3)
    {
        srand (time(NULL));
        Inflationsabzug= rand()%99+1;
        Markt1.Senkung=Inflation*Inflationsabzug/100*2;
    };



    if (Inflation==2)
    {
        srand (time(NULL));
        Inflationsabzug=rand()%99+1;
        Markt1.Steigerung=Inflation*Inflationsabzug/100;
    };
    if (Inflation==1)
    {
        Inflationsabzug=1;
    };
    if (Inflation==3)
    {
        srand (time(NULL));
        Inflationsabzug=rand()%99+1;
        Markt1.Steigerung=Inflation*Inflationsabzug/100*2;

    };

    Markt1.Wertentwicklung=(1+ Markt1.Steigerung*Markt1.Senkung
                                      *Kostenniveau);
};
if (Preischance<=50)
Markt1.Wertentwicklung=1;

return Markt1;
}


Und jetzt der TEil der Funktion, die nicht funktioniert:

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
void Menue(CBasis (&RestonaGuldon_Spieler0),
        CBasis (&KlendautKlendaut_Spieler0),
        CBasis (&AbsariLumos_Spieler0),
        CBasis (&HysskallMatras_Spieler0),
        CPlanet (&CRestonaGuldon),
    CPlanet (&CKlendautKlendaut),
    CPlanet (&CAbsariLumos),
    CPlanet (&CHysskallMatras),
           Schuerfer CSchuerfer0RestonaGuldon[],
Flugwaechter CFlugwaechter0RestonaGuldon[],
Jaeger CJaeger0RestonaGuldon[],
Schuerfer CSchuerfer0KlendautKlendaut[],
Flugwaechter CFlugwaechter0KlendautKlendaut[],
Jaeger CJaeger0KlendautKlendaut[],
Schuerfer CSchuerfer0AbsariLumos[],
Flugwaechter CFlugwaechter0AbsariLumos[],
Jaeger CJaeger0AbsariLumos[],
Schuerfer CSchuerfer0HysskallMatras[],
Flugwaechter CFlugwaechter0HysskallMatras[],
Jaeger CJaeger0HysskallMatras[],
Preisentwicklung GebePreise())
{

    while (true)
    {
    string Basisname;
    float Marktwerte=1;

    if (alteRunde<=Runde)
    {
        if (Basisnummer0==13)
        {
        Preisentwicklung Berechnung2;
        Berechnung2= GebePreise(Berechnung);
        Marktwerte= Berechnung2.Wertentwicklung/80.0;
        };
        if (Basisnummer0==1)
        {
        Preisentwicklung Berechnung1;
        Berechnung1= GebePreise(Berechnung1);
        Marktwerte= Berechnung1.Wertentwicklung/120.0;
        };
        if (Basisnummer0==9)
        {
            Preisentwicklung Berechnung1;
            Berechnung1= GebePreise(Berechnung1);
            Marktwerte= Berechnung1.Wertentwicklung/90.0;
        }
        if (Basisnummer0==21)
        {
            Preisentwicklung Berechnung1;
            Berechnung1= GebePreise(Berechnung1);
            Marktwerte= Berechnung1.Wertentwicklung/95.0;
        }


    };

    //Basisname anzeigen
    if (Basisnummer0==1)
        Basisname="Planet Klendaut auf System Klendaut";
    if (Basisnummer0==9)
        Basisname="Planet Lumos auf System Absari";
    if (Basisnummer0==13)
        Basisname= "Planet Guldon auf System Restona";
    if (Basisnummer0==21)
        Basisname= "Planet Matras auf System Hysskall";

    if (Marktwerte==0)
    {
        Marktwerte=1;
    };


Aufgerufen wird die Funktion so:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Menue(RestonaGuldon_Spieler0, KlendautKlendaut_Spieler0, AbsariLumos_Spieler0, HysskallMatras_Spieler0,
          CRestonaGuldon, CKlendautKlendaut, CAbsariLumos, CHysskallMatras,
          Schuerfer0RestonaGuldon,
Flugwaechter0RestonaGuldon,
Jaeger0RestonaGuldon,
Schuerfer0KlendautKlendaut,
Flugwaechter0KlendautKlendaut,
Jaeger0KlendautKlendaut,
Schuerfer0AbsariLumos,
Flugwaechter0AbsariLumos,
Jaeger0AbsariLumos,
Schuerfer0HysskallMatras,
Flugwaechter0HysskallMatras,
Jaeger0HysskallMatras,
GebePreise());


Das ist jetzt ein Durcheinander und gar nicht mehr schön. ALs es alles noch in der main.cpp stand, hat es funktioniert. Jetzt, nachdem ich es umgebaut hab und versucht habe, alles einzubinden, ist es ein Knorz!!!

Wäre toll, jemand schaut da mal rein...

4

07.08.2015, 18:58

Oh Hölle :)

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#ifndef PREISENTWICKLUNG_HPP_INCLUDED
#define PREISENTWICKLUNG_HPP_INCLUDED

using namespace std;
#include <string>

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

} Berechnung;

Zu erst mal. Keine usings in header rein schreiben. Damit machst du es jedem c file bekannt, dem du den Header includierst. Das gibt lustige Fehlersuchen ab. Außerdem schreibst du ja eh std::string. Da benötigst du das using eh nicht.

Zum andern kommt in die Headerdatei auch der Prototyp deiner Funktion. Also der Kopf deiner Funktion

C-/C++-Quelltext

1
Preisentwicklung GebePreise(Preisentwicklung);


Das du das #endif vergessen hast zähle ich mal unter copy/paste Fehler.

In deine .cpp Datei kommt jetzt die Implementierung der Funktion GebePreise

C-/C++-Quelltext

1
2
3
4
5
6
#include "presientwicklung.hpp"

Preisentwicklung GebePreis(Preisentwicklung  daten){
            // machwas
            return geänderteDaten;
}


Damit kannst du nun deine Funktion überall dort aufrufen, wo das Headerfile includiert wird.

Hoffe das hilft erst mal weiter.

Grüße.

PS: Kleiner Tip: srand wird nur einmal im ganzen programm aufgerufen. Wenn du das mit srand(time(NULL)) innerhalb einer sekunder mehrfach aufrufst, liefert rand jeweils den gleichen wert zurück.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »panicjonny« (07.08.2015, 19:11)


Korowai

unregistriert

5

08.08.2015, 12:08

Ich rufe in der Funktion so auf:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void Menue(CBasis (&RestonaGuldon_Spieler0),
        CBasis (&KlendautKlendaut_Spieler0),
        CBasis (&AbsariLumos_Spieler0),
        CBasis (&HysskallMatras_Spieler0),
        CPlanet (&CRestonaGuldon),
    CPlanet (&CKlendautKlendaut),
    CPlanet (&CAbsariLumos),
    CPlanet (&CHysskallMatras),
           Schuerfer CSchuerfer0RestonaGuldon[],
Flugwaechter CFlugwaechter0RestonaGuldon[],
Jaeger CJaeger0RestonaGuldon[],
Schuerfer CSchuerfer0KlendautKlendaut[],
Flugwaechter CFlugwaechter0KlendautKlendaut[],
Jaeger CJaeger0KlendautKlendaut[],
Schuerfer CSchuerfer0AbsariLumos[],
Flugwaechter CFlugwaechter0AbsariLumos[],
Jaeger CJaeger0AbsariLumos[],
Schuerfer CSchuerfer0HysskallMatras[],
Flugwaechter CFlugwaechter0HysskallMatras[],
Jaeger CJaeger0HysskallMatras[],
Preisentwicklung GebePreise(Berechnung))


DA gibt mir der compiler folgende Fehlermeldung für die letzte Zeile:

"error: expected ',' or '...' before '(' token

Was ist da falsch?

6

08.08.2015, 12:52

Mal von dem furchtbaren, furchtbaren Funktionsparametern abgesehen?


in der letzten Zeile schreibst du
Preisentwicklung GebePreise(Berechnung))

mach das Preisentwicklung weg. Der ganze Rest ist auch nicht so besonders. Warum brauchst du so viele Parameter?

Als Tip kann ich dir Empfehlen: http://www.amazon.de/Effektiv-programmie…mayers+effektif

Korowai

unregistriert

7

08.08.2015, 14:50

Wenn ich das so umschreibe, erhalte ich die Meldung "Gebe Preise" is not a type.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

08.08.2015, 15:14

Du vermengst da Funktionsaufrufe und Funktionsdeklarationen, dabei ist es wirklich nicht schwer das Konzept und den Aufbau zu verstehen, wenn man ein Buch gelesen hat. Ich rate Dir noch einmal ernsthaft zu einem Buch. Irgendwann sind solche Beiträge nicht mehr akzeptabel, weil es nach eigener Faulheit riecht, die wir ausgleichen sollen. Dafür ist ein Forum auf Dauer nicht gedacht.
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

9

08.08.2015, 15:45

Ich habe drei Bücher. Zwei zur C++ Programmierung und eines für OpenGL.

Ich kann aus den Büchern halt nicht genau die Lösungsstellungen entnehmen, die ich explizit benötige. Ich arbeite viel und in meiner FReizeit versuche ich c++ zu lernen.

Aber wenn das hier so negativ auffällt, dass ich FRagen stelle, dann löscht halt meinen Account bei Euch und ich gehe woanders hin.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

08.08.2015, 18:39

Es geht nicht darum Fragen zu stellen. Aber wenn Du in jedem Topic wieder und wieder eine einfache Funktionsdeklaration nicht beherrschst, dann machst Du Deine Hausaufgaben nicht richtig und wir sind nicht dafür da Dir immer wieder dieselben Fehler zu erläutern. Einmal ist absolut normal. Zweimal ist durchaus in Ordnung, Programmierung ist viel mit lernen verbunden. Aber immer und immer wieder, das geht einfach nicht. Du musst doch selbst merken, dass es so nicht funktioniert.

Und dass die Lösung nicht in Deinen Büchern steht, das ist nicht wahr. Das glaube ich Dir auch nicht. Jedes Buch über C++ schreibt klipp und klar, wie man eine Funktion deklariert und wie man Funktionen aufruft. Das ist kein Hexenwerk und zumindest die Deklaration folgt ganz einfachen Regeln, die Du trotzdem immer und immer wieder brichst. Und dann bekommst Du immer wieder denselben Fehler.
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]

Werbeanzeige