Problem mit Pointer! - Aber wieso?



  • Guten Tag zusammen,

    ich schreibe gerade an einer Funktion, die beim Programmstart die Felder befüllen soll. Die Funktion sieht so aus:

    void felderbefuellung(char *felds1, char *felds2, char *spielfeld){
    	int i, j;
    	for(i=0;i<namenslaenge;i++){
    		felds1[i] = '\0';
    	}
    	for(i=0;i<namenslaenge;i++){
    		felds2[i] = '\0';
    	}
    	for(i=0;i<matrix1;i++){
    		for(j=0;j<matrix2;j++){
    			spielfeld[i][j] = 0;
    		}	
    	}
    }
    

    Ist ja alles schön und gut, denn die ersten beiden Felder werden befüllt. Was nicht funktioniert ist die Befüllung des 3. Feldes.

    Es kommt der Fehler:
    K:\BackUp\Thomas\Schule\Vier_Gewinnt_Proper\Vier_Gewinnt_Proper.cpp(182) : error C2106: '=' : Linker Operand muss ein L-Wert sein

    Ich hätte natürlich eine alternative um diese 2 Dimensionale Feld zu befüllen, allerdings würde ich gerne wissen warum das so nicht funktioniert? Ist ja eig die gleiche Syntax wie bei den ersten beiden Schleifen...

    Schonmal vielen Dank

    Euer Global



  • Du hast spielfeld nur als einfachen Pointer auf char
    definiert, außerdem, woher soll der Compiler denn bei
    spielfeld[i][j] wissen, wie groß die 2. Dimension von
    spielfeld ist?



  • Wie meinst du des mit dem einfachen Pointer?
    Es ist so definiert:

    const int matrix1 = 7;
    const int matrix2 = 8;
    char feld[matrix1][matrix2];		//Deklariert die Größe des Spielfeldes.
    

    also Global...
    MfG



  • 1. Du verwendest einen C++-Compiler für C. Das ist nicht gut.
    2. Wenn das 2D-Array eh global ist, warum dann übergeben?
    3. Ein 2D-Array übergibt man so:

    void foo( int bar[][DIM_Y] );
    
    int baz[DIM_X][DIM_Y];
    
    foo( baz );
    


  • Aber die Funktion hat als Signatur

    void felderbefuellung(char *felds1, char *felds2, char *spielfeld){
    

    und da ist spielfeld nur ein einfach-pointer kein Doppelpointer auf char

    Versuchs mal mit

    void felderbefuellung(char *felds1, char *felds2, char *spielfeld[matrix2]){
    


  • @tim
    Ich versteh zwar iwie dein Code nicht, aber wenn ich den 3. Parameter ganz entferne, dann funktionierts auch 🙂
    danke



  • Javaner schrieb:

    Versuchs mal mit
    C/C++ Code:
    void felderbefuellung(char *felds1, char *felds2, char *spielfeld[matrix2]){
    C/C++ Code:
    void felderbefuellung(char *felds1, char *felds2, char *spielfeld[matrix2]){
    C/C++ Code:
    void felderbefuellung(char *felds1, char *felds2, char *spielfeld[matrix2]){

    Würde ich des machen, würde dann nicht nur die erste Dimension übergeben werden?
    Also ich hab den 3. Parameter jetzt einfach nach Tims Tipp rausgeworfen und es funktioniert prächtig...
    Vielen vielen dank euch allen 🙂


Anmelden zum Antworten