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

Raidenkk

Treue Seele

  • »Raidenkk« ist der Autor dieses Themas

Beiträge: 151

Wohnort: Bergkamen/Oberaden

Beruf: Multimedia Informatik

  • Private Nachricht senden

1

28.04.2011, 12:03

[C++] Array fehler?

Hey,
ich habe eine kleines Charakter Stats Programm geschrieben aber irgendwie zeigt er beim benutzen meiner Funktion ein Fehler an.
Was könnte ich falsch gemacht haben?

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
// #########################
// Charakter Stats
// #########################

#include <iostream>

using namespace std;

void levelStats (int level, int str, float ges);

int main()
{
    //Variablen
    int level; //Level (1-6)
    int str[] = {3, 6, 8, 10, 12, 18}; //Stärke
    int ges[] = {21, 18, 15, 12, 10, 8}; //Geschwindigkeit

    //Level Eingabe
    do
    {
    cout << "##### Eingabe #####" << endl;
    cout << "Gib das Level an (1-6): ";
    cin >> level;
    } while (level < 1 || level > 6);
    --level;

    //Level Stats ausgeben
    levelStats (level, str, ges);

    system("pause");
    return 0;
}

void levelStats (int level, int str[], int ges[])
{
    system ("cls");
    cout << "Level: " << level << endl;
    cout << "Stärke: " << str[level] << endl;
    cout << "Geschwindigkeit: " << ges[level] << endl;
}


Fehler:
Fehler 1 error C2664: 'levelStats': Konvertierung des Parameters 2 von 'int [6]' in 'int' nicht möglich c:\users\raiden\documents\visual studio 2010\projects\array training\array training\main.cpp 28

Harry222

Alter Hase

Beiträge: 864

Beruf: Student

  • Private Nachricht senden

2

28.04.2011, 12:22

Zitat

Überprüfen Sie den Prototyp der jeweiligen Funktion erneut, und korrigieren Sie das in der Fehlermeldung angegebene Argument.
Guck doch einfach mal hier nach! ;)
Du hast beim Prototyp die eckigen Klammern vergessen!

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

3

28.04.2011, 12:36

da fehlt noch ne ganze menge mehr.
du hast deklariert, dass du ein float übergibst. für die anzahl der level solltest du eine variable definieren, damit du sie zentral ändern kannst.
das definieren der arraygröße macht auch mit initialisierungsliste sinn weil du das array dann nicht ausversehen zu groß machen kannst.
wenn du ein array übergibst solltest du das klar und deutlich per zeiger machen. also nicht "int str[]" sondern "int *str". das macht zwar für das programm keinen unterschied aber so ist klar, dass der sizeof operator die größe des zeigers zurück gibt und nicht die des arrays.
mein vorschlag:

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
#include <iostream>

using namespace std;

const unsigned int anzahlLevel = 6;

void levelStats (int level, int *str, int *ges);

int main()
{
    //Variablen
    int level; //Level (1-6)
    int str[anzahlLevel] = {3, 6, 8, 10, 12, 18}; //Stärke
    int ges[anzahlLevel] = {21, 18, 15, 12, 10, 8}; //Geschwindigkeit

    //Level Eingabe
    do
    {
    cout << "##### Eingabe #####" << endl;
    cout << "Gib das Level an (1-6): ";
    cin >> level;
    } while (level < 1 || level > anzahlLevel);
    --level;

    //Level Stats ausgeben
    levelStats (level, str, ges);

    system("pause");
    return 0;
}

void levelStats (int level, int *str, int *ges)
{
    system ("cls");
    cout << "Level: " << level+1 << endl;
    cout << "Stärke: " << str[level] << endl;
    cout << "Geschwindigkeit: " << ges[level] << endl;
}
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »NachoMan« (28.04.2011, 12:46)


4

28.04.2011, 12:38

ich hab in deinen code noch einen anderen fehler entdeckt:

C-/C++-Quelltext

1
2
3
    cout << "Level: " << level << endl;
    cout << "Stärke: " << str[level] << endl;
    cout << "Geschwindigkeit: " << ges[level] << endl;

da str und ges jeweils ein array mit 6 speicherplätzen sind ( also mit speicherplatz 0,1,2,3,4,5), wird bei lvl 6 auf einen nicht vorhandenen speicher zugegriffen.
eingentlich müsstest du

C-/C++-Quelltext

1
2
3
    cout << "Level: " << level << endl;
    cout << "Stärke: " << str[level-1] << endl;
    cout << "Geschwindigkeit: " << ges[level-1] << endl;

schreiben.

Zitat

Basically, there are only 10 types of people in the world. Those who know binary, and those who don't.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

5

28.04.2011, 12:39

da es nur für den user um eins verschoben wird, macht man das normalerweise direkt nach der eingabe, was in dem geposteten code auch passiert. ;)

edit: gerade gesehen, dass das level bei der ausgabe ja nochmal angeben wird. da fehlt natürlich ein +1
oben editiert
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »NachoMan« (28.04.2011, 12:46)


Raidenkk

Treue Seele

  • »Raidenkk« ist der Autor dieses Themas

Beiträge: 151

Wohnort: Bergkamen/Oberaden

Beruf: Multimedia Informatik

  • Private Nachricht senden

6

28.04.2011, 12:44

Fuxii ich denke mal so ist es richtig :D

Quellcode

1
2
3
cout << "Level: " << level << endl;
    cout << "Stärke: " << str[level-1] << endl;
    cout << "Geschwindigkeit: " << ges[level] << endl;



level = 3 (ist das level klar)
str (level -1 das level ist jetzt auf 2 und auch noch ok)
ges (level-1 das level ist nun auf 1 und gibt den falschen wert aus)

ich denke mal das str -1 reicht :D

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

7

28.04.2011, 12:47

Unsinn! Lern erstmal die Operatoren kennen. Und dann wie man den Debugger benutzt. Das duerfte dir auch fuer die Zukunft sehr zu Gute kommen.

8

28.04.2011, 12:50

ne weil du nicht

C-/C++-Quelltext

1
level=level-1

wodurch du level einen neuen wert zuweist, sondern

C-/C++-Quelltext

1
str[level-1]

nimmst, wo der wert von lvl nicht verändert wird.

im grunde würde bei meinen code so gerechnet werden:

C-/C++-Quelltext

1
2
3
    cout << "Level: " << level << endl;   // level =3 
    cout << "Stärke: " << str[level-1] << endl; // level-1=2 so wird str[2] (= das dritte element) abgefragt. level bleibt aber 3
    cout << "Geschwindigkeit: " << ges[level-1] << endl; // level-1=2 so wird ges[2] (= das dritte element) abgefragt. level bleibt aber 3


deine idee wäre aber:

[ccp]count << "Level:" << level << endl; // level =3
cout << "Stärke: " << str[level-1] << endl; // level-1=2 so wird str[2] (= das dritte element) abgefragt. level bleibt aber 3
cout << "Geschwindigkeit: " << ges[level] << endl; // level=3 so wird ges[3] (= das vierte element) abgefragt. level bleibt aber 3[/cpp]

Zitat

Basically, there are only 10 types of people in the world. Those who know binary, and those who don't.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

9

28.04.2011, 12:51

@TGGC: kannst du uns sagen an wen der post gerichtet war? edit: jetzt hab ichs kapiert -.-

@Fuxii: schau mal in zeile 25.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »NachoMan« (28.04.2011, 13:00)


Raidenkk

Treue Seele

  • »Raidenkk« ist der Autor dieses Themas

Beiträge: 151

Wohnort: Bergkamen/Oberaden

Beruf: Multimedia Informatik

  • Private Nachricht senden

10

28.04.2011, 12:59

ist klar das level = 3 ein zuweisungsoperator ist es. Ich habe es als beispiel genutzt um zu sagen (Hey wir sind jetzt auf level 3)


level = 3 (ist das level klar)
str (level -1 das level ist jetzt auf 2 und auch noch ok)
ges (level-1 das level ist nun auf 1 und gibt den falschen wert aus)

ich denke mal das str -1 reicht

Werbeanzeige