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

  • »drakon« ist der Autor dieses Themas

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

1

06.10.2006, 21:11

Array an Funktionen übergeben

Hallo zusammen.

Ich bin bei Kapitel 5 (Arrays und Strukturen) des Buches <C++ für Spieleprogrammierer>.
Ich wollte mich ein wenig einarbeiten und habe ein bisschen rumprobiert und dabei auch arrays, funktionen, strukturen benutzt.
Nur kam ich bei der übergabe der Arrays an die Funktion nicht mehr weiter. Da ich immer irgendeinen Fehler erhalten habe, habe ich ein kleines übersichtlicheres Programm geschrieben, doch auch hier funktioniert es nicht.

Hier der gesamte Quellcode:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>

using namespace std;

void ausgabe(int); //Prototyp



int main()
{
    int Feld[1]; //Array



ausgabe(Feld[1]); //Funktionsaufruf


    return 0;
}

void ausgabe(int Feld[1]) //Ausgabe-Funktion

{
    cout<<Feld[1]<<endl;
}


Die herausgegebene Fehlermeldung lautet:

Quellcode

1
2
3
4
5
6
7
------ Erstellen gestartet: Projekt: Vergleich, Konfiguration: Debug Win32 ------
Verknüpfen...
Vergleich.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""void __cdecl ausgabe(int)" (?ausgabe@@YAXH@Z)" in Funktion "_main".
D:\Eigene Dateien\Visual Studio 2005\Projects\Vergleich\Debug\Vergleich.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
Das Buildprotokoll wurde unter "file://d:\Eigene Dateien\Visual Studio 2005\Projects\Vergleich\Vergleich\Debug\BuildLog.htm" gespeichert.
Vergleich - 2 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========


Ich denke mir einmal, dass es irgendeine komplizierte Lösung gibt, aber mich interessiert im Moment eine für mich verständlich Lösung.
Daher bitte (wenn möglich) ein konkretes Beispiel für diesen Code bringen.

Anonymous

unregistriert

2

06.10.2006, 21:24

Versuch das mal:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream> 

using namespace std; 

void ausgabe(int Feld[1]); //Prototyp 



int main() 
{ 
    int Feld[1]; //Array 



ausgabe(Feld); //Funktionsaufruf 


    return 0; 
} 

void ausgabe(int Feld[1]) //Ausgabe-Funktion 

{ 
    cout<<Feld<<endl; 
}


Und initialisier Feld am Besten mal...

Anonymous

unregistriert

3

06.10.2006, 21:25

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> 

void ausgabe (int *Feld) // ODER: void ausgabe (int Feld[])

                         // Es sollte jedoch * bevorzugt werden.

{ 
//    In C++ fängt man bei 0 an zu zählen ;) Dies würde einen

//    ungültigen Zugriff verursachen.

//    cout<<Feld[1]<<endl;


//    Rischtig is:

      std::cout << Feld[0] << std::endl;
}


int main() 
{ 
//  Array schön und gut, aber was für ein Inhalt? ;)

//  int Feld[1]; //Array 


//  daher:

//  int Feld[1];

//  Feld[0] = 100000;


//  oder:

    int Feld[1] = { 100000 }; 

//  Übergibst Du nun einen Wert oder ein Array? In diesem Falle

//  Einen Wert und kein Array

//  ausgabe(Feld[1]); //Funktionsaufruf 


//  daher:

    ausgabe (Feld);

    return 0; 
}

drakon

Supermoderator

  • »drakon« ist der Autor dieses Themas

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

06.10.2006, 21:26

doch wollte ich im msn anschreiben..;-)

funzt immernoch nicht..
bekomme das:

Quellcode

1
2
3
4
5
6
7
Kompilieren...
Vergleich.cpp
d:\eigene dateien\visual studio 2005\projects\vergleich\vergleich\vergleich.cpp(13) : error C2664: 'ausgabe': Konvertierung des Parameters 1 von 'int' in 'int []' nicht möglich
        Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
Das Buildprotokoll wurde unter "file://d:\Eigene Dateien\Visual Studio 2005\Projects\Vergleich\Vergleich\Debug\BuildLog.htm" gespeichert.
Vergleich - 1 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

drakon

Supermoderator

  • »drakon« ist der Autor dieses Themas

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

5

06.10.2006, 21:29

etwas zu langsam..

hmm..gut, jetzt verstehe ich nicht mehr alles..

ja, gut, das mit dem wert ist ok, nur das problem ist, ich wollte das ganze array ursprünglich in eine funktion packen und dan in der funktion füllen lassen.

so in diesem sinne:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
int Feld_füllen(char Feld[10][10], int Höhe, int Breite )
{
for(int i=0;i<Höhe;i++)
    {
        for(int y=0;y<Breite;y++)
        {
            Feld[y][i]='X';
        }
    }
return 0;
}   

Anonymous

unregistriert

6

06.10.2006, 21:55

Warum schreibst du keine Klasse dafür? Warum gibst du 0 zurück?
Was funktioniert da nicht? Wie rufst du die Funktion auf?

drakon

Supermoderator

  • »drakon« ist der Autor dieses Themas

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

7

06.10.2006, 22:01

also..ich schreibe keine klasse, weil ich das (noch) nicht kann, und ich möchte auch nicht einfach irgendwo vorgreifen..
ich wollte es einfach mal so probieren ein array zu übergeben, aber langsam habe ich das gefühl, dass das nicht so einfach ist, und wahrscheinlich auch nicht geht.
ich gebe 0 zürück, weil ich eine int-funktion gemacht habe und da gehöft ja ein return dazu..
ich habe kein void genommen, weil ich es ausprobiert habe und mir eine fehlermeldung gekommen ist, dass 1 wert in der funktion nicht übergeben werden kann, oder so und darum habe ich einfach mal gedacht, dass ich es mit einer int-funktion probiere..ist aber glaube ich dann doch auf das gleiche rausgekommen, und dann habe ich es einfach gelassen.

hier der gesamtte quellcode:

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

using namespace std;

int Feld_füllen( int,int,char); //Prototyp


int main()
{
        //Variabeln/ Konstanten

    int const Höhe=10;
    int const Breite=10;
    char Feld[Breite][Höhe];

    
    
Feld_füllen (Höhe, Breite,Feld[10][10] ); //Feld füllen aufrufen




    for(int i=0;i<Höhe;i++) //Feld ausgeben

    {
        for(int y=0;y<Breite;y++)
        {
            cout<<Feld[y][i];
        }
        cout<<endl;
    }

    return 0;   


}

int Feld_füllen(int  Höhe, int  Breite,char Feld[10][ 10]) //Feld mit X füllen

{
for(int i=0;i<Höhe;i++)
    {
        for(int y=0;y<Breite;y++)
        {
            Feld[y][i]='X';
        }
    }
return 0;
}


unterdessen habe ich ein bisschen weiterprobiert, ist aber dennoch noch nichts intelligentes dabei rausgekommen...ich bin langsam wirkli mit meinem latein am ende... :(

Anonymous

unregistriert

8

06.10.2006, 22:14

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

void Feld_füllen (int Breite, int Höhe, unsigned char Feld[10][10])
{ 
    for (int y = 0; y < Höhe; y++) 
    for (int x = 0; x < Breite; x++)
        Feld [y][x] = 'X'; 
}

int main (void) 
{ 
    int const Breite = 10; 
    int const Höhe   = 10; 
    unsigned char Feld [Breite][Höhe]; 

    Feld_füllen (Breite, Höhe, Feld);

    for (int y = 0; y < Höhe; y++)
    {
        for (int x = 0; x < Breite; x++)
            std::cout << Feld [y][x];

        std::cout << std::endl;
    }

    std::cin.get ();

    return 0;
}


Sollte so funktionieren, wie du es wolltest.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

9

06.10.2006, 22:26

Les dir mal folgenden Beitrag von mir und vorallem den von unsigned long (ich hab mich schon gewundert, wer da so eifrig schreibt ;) ) durch

https://www.spieleprogrammierer.de/phpBB2/viewtopic.php?p=50574&highlight=pointer+array#50574

drakon

Supermoderator

  • »drakon« ist der Autor dieses Themas

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

10

06.10.2006, 22:32

@koschka:
Ist wirklich gut gemeint, aber ich möchte wirklich nicht vorgreifen, da ich ja erst im Kapitel 5 bin, werden Pointer ja erst noch behandelt, und wenn ich jetzt schon damit anfange, glaube ich bekomme ich nur ein durcheinander.
Aber Danke dennoch für den Rat!

Unterdessen hat mir Riddick schon geholfen und ich habe die Lösung schon fast!

Lg Drakon

Werbeanzeige