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

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

11

22.07.2009, 19:56

http://www.cplusplus.com/reference/iostream/

Allerdings würde ich auch eher zu einem Container raten, den du übergibst oder sonst in etwa so, wie David es vorschlägt machen.

FLO2

Treue Seele

  • »FLO2« ist der Autor dieses Themas

Beiträge: 221

Beruf: Schüler

  • Private Nachricht senden

12

22.07.2009, 20:12

Hi
Dort wäre dann ios_base das richtige oder?

Was machen denn diese Container genau?

Danke im Voraus
Pi mal Daumen = 18.84955592

13

22.07.2009, 20:35

Zitat von »"K-Bal"«

Ich habe mal gehört, dass das kein schöner Stil sein soll, aber weiß spontan auch keinen Grund und finde kein Quote.
Fehlende Typsicherheit, Argumente werden weder zur Compilezeit noch zur Laufzeit geprüft! Funktioniert zudem nur mit POD-Typen, richtige Klassen kann man vergessen. Recht mühsame Punkte, bedenkt man, dass wir in C++ programmieren und das alles gar nicht nötig haben. ;)

Nebenbei: Einführung in STL-Container.

14

22.07.2009, 20:44

Zitat von »"FLO2"«

Hi
Dort wäre dann ios_base das richtige oder?

eigentlich nciht.
um streams selbst zu implementieren, schau dir besser boost::iostreams an:
http://www.boost.org/doc/libs/1_39_0/libs/iostreams/doc/index.html

das, was du da versuchst, sieht mir am ehsten nach nem filter aus ;)

FLO2

Treue Seele

  • »FLO2« ist der Autor dieses Themas

Beiträge: 221

Beruf: Schüler

  • Private Nachricht senden

15

24.07.2009, 12:40

@ PCShadow
Ok. werds's mir auch mal anschauen.


So habe jetzt ein Problem mit den Vektoren. Ich habe mir den Teil über Container und Vektoren angesehen und einen kleinen Versuch gestartet.
Code:

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
//

#include <iostream>
#include <vector>
using namespace std;

void Berechnen (int Zahl1, int data[2]);

int main ()
{
    vector<int> data;
    data.push_back(1);
    data.push_back(2);
    data.push_back(3);

    Berechnen (123, 345, 3456);
}

void Berechnen (int Zahl1, int data[2])
{
    Zahl1 = data[1] + data[2];
    cout << Zahl1 << endl;
}


Fehler:

Quellcode

1
error C2660: 'Berechnen': Funktion akzeptiert keine 3 Argumente


Benutze ich denn die Vektoren so richtig?

Danke im Voraus! :D
Pi mal Daumen = 18.84955592

ChrisJ

Alter Hase

Beiträge: 487

Wohnort: Schweich

Beruf: Schüler

  • Private Nachricht senden

16

24.07.2009, 12:52

Zitat von »"FLO2"«


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
//

#include <iostream>
#include <vector>
using namespace std;

void Berechnen (int Zahl1, int data[2]);

int main ()
{
// du schiebst werte in den vector, fängst aber nichts weiter mit an

    vector<int> data;
    data.push_back(1);
    data.push_back(2);
    data.push_back(3);

// so wird kein array übergeben!

    Berechnen (123, 345, 3456);
}

// warum übergibst du Zahl1 als parameter?

// 1. call by value, Zahl1 wird nicht verändert

// 2. du gibts den wert sowieso nur aus

// außerdem: indizes sind falsch:

// data[2] -> indizes 0 ( erstes element ), 1 (zweites element)

void Berechnen (int Zahl1, int data[2])
{
    Zahl1 = data[1] + data[2];
    cout << Zahl1 << endl;
}

// du willst wohl etwas machen wie:

/*
void Berechnen(const vector<int>& data);

dann kannst du Berechnen einen std::vector<int> als parameter geben
*/

"Don't trust your eyes: They are a hell of a lot smarter than you are"

FLO2

Treue Seele

  • »FLO2« ist der Autor dieses Themas

Beiträge: 221

Beruf: Schüler

  • Private Nachricht senden

17

24.07.2009, 13:14

Meinst du dann so:

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
//

#include <iostream>
#include <vector>
using namespace std;

void Berechnen (const vector<int>& data);

int main ()
{
    vector<int> data;
    data.push_back(1);
    data.push_back(2);

    Berechnen (345, 3456);
}

void Berechnen (const vecotr<int>& data)
{
    int Zahl1 = 0;

    Zahl1 = data[0] + data[1];
    cout << Zahl1 << endl;
}


Fehler:

Quellcode

1
2
3
4
5
error C2660: 'Berechnen': Funktion akzeptiert keine 2 Argumente
error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
error C2143: Syntaxfehler: Es fehlt ',' vor '<'
error C2065: 'data': nichtdeklarierter Bezeichner
error C2065: 'data': nichtdeklarierter Bezeichner


Ist es mit Vektoren überhaupt möglich eine undefinierte Anzahl von Parametern zu benutzen?

Danke im Voraus!
Pi mal Daumen = 18.84955592

18

24.07.2009, 13:23

jain. du kannst deiner funktion nicht einfach beliebig viele Argumente übergeben, sodnern nur einen vektor mit einer belibigen anzahl von werten.
also:

C-/C++-Quelltext

1
2
3
4
std::vector vec(2);
vec[0]=123;
vec[1]=456;
Berechnen(vec);

und nicht

C-/C++-Quelltext

1
Berechnen(123, 456);

außerdem hast du beim zuletzt geposteten Quellcode im kopf von berechnen vecotr statt vector geschrieben -> wenn der Compiler n Typspezifierer nciht erkennt, n Bezeichner nicht findet, o.ä., erstmal gucken, ob man sich nicht verschrieben hat.

//edit: für eine tatsächlich unbegrenzte Zahl an Parametern gibt's nur die Elipsis, für eine belibige Anzahl an Parametern bis zu einem bestimmten maximum kann man die Funktion auch einfach überladen oder default-parameter angebem

FLO2

Treue Seele

  • »FLO2« ist der Autor dieses Themas

Beiträge: 221

Beruf: Schüler

  • Private Nachricht senden

19

24.07.2009, 14:41

So, da ich bei den Vektoren nur noch Fehler bekomme( :? ), versuche ich mich jetzt mit Ellipsis. Werde das Kapitel mit Vektoren eh bald durcharbeiten.
Zu Ellipse habe ich auch schon ein Tutorial gefunden, welches ich jedoch sehr schlecht erklärt finde.
Code:

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
int print(const char *str,...)
{

        int i;

        int num_count=atoi(str);

        int *num=(int *)&str;

        for(i=1;i<=num_count;i++)

                printf("%d ",*(num+i));}

int print_num(int num_count,...)
{

        int i;

        int *num=&num_count;

        for(i=1;i<=num_count;i++)

                printf("%d ",*(num+i));

}

int main()

{

        print_num(3,2,3,4);

        print("3",2,3,4);

}


Wie kann ich denn das benutzen um ungefähr eine Funktion wie printf zu erhalten?
Hat denn jemand ein gutes Tutorial?

Danke im Voraus
Pi mal Daumen = 18.84955592

20

24.07.2009, 15:00

Du brauchst dazu die va_-Makros (va_start, va_list, ...).

Aber ein guter Tipp: Vergiss die Ellipse! In C++ kannst du die kaum anwenden, da sie wie bereits erwähnt nur mit PODs funktioniert (also nicht mit üblichen Klassen!) und sämtliche Typsicherheit über den Haufen wirft. Nimm dir lieber die Zeit und lerne brauchbares C++ wie zum Beispiel die STL-Container. Die kannst du später auch produktiv einsetzen.

Werbeanzeige