Anfängerfehler?



  • NewIsNew schrieb:

    @asfdlol
    g++ zeigt trotzdem einen Fehler an

    Dann machst du sonst etwas falsch. Der Code ist richtig. Du kannst uns deinen Code ja mal zeigen.



  • NewIsNew schrieb:

    @asfdlol
    g++ zeigt trotzdem einen Fehler an)

    Darf er aber nicht, irgendwas an deinem Code ist noch falsch.
    Drum kopier ihn mal hier rein, dann können wir dir sagen was. 🙂



  • #define BIT0 0
    #define BIT1 1
    #define BIT2 2
    #define BIT3 3
    #define BIT4 4
    #define BIT5 5
    #define BIT6 6
    #define BIT7 7
    
    int main(void)
    {
    	int val;
    
    	//...
    	better_set_bit(2, 6, 1, &val);
    	//...
    
    	return 0;
    }
    
    void set_bit(int position, int worth, int* integer)
    {
    	*integer = (worth << position);
    }
    
    void better_set_bit(int start, int end, int worth, int* integer)
    {
    	while(start <= end)
    	{
    		set_bit(start, worth, &integer);
    		start++;
    	}
    }
    
    /Users/tim/Desktop/Bit.cpp:15:2: error: use of undeclared identifier 'better_set_bit'
            better_set_bit(2, 6, 1, &val);
            ^
    /Users/tim/Desktop/Bit.cpp:30:3: error: no matching function for call to 'set_bit'
                    set_bit(start, worth, &integer);
                    ^~~~~~~
    /Users/tim/Desktop/Bit.cpp:21:6: note: candidate function not viable: no known conversion from 'int **' to 'int *' for 3rd argument; remove &
    void set_bit(int position, int worth, int* integer)
         ^
    2 errors generated.
    [Finished in 0.1s with exit code 1]
    

    Hat gedauert mit dem Code weil ich die Datei verloren hab 😕



  • Fällt dir der Unterschied zwischen deinem Code von vorhin und dem aktuellen auf? Im anderen hattest du Vorwärtsdeklarationen. Diese fehlen hier. Jedoch würde ich - wenn sie nicht aus einem anderen Grund benötigt werden - Vorwärtsdeklarationen vermeiden (Redundanz / DRY). Daher einfach die Reihenfolge umkehren und main als letzte Funktion definieren.



  • NewIsNew schrieb:

    void better_set_bit(int start, int end, int worth, int* integer)
    {
    	while(start <= end)
    	{
    		set_bit(start, worth, &integer); //Hier ***
    		start++;
    	}
    }
    

    *** rufst Du set_bit mit einem Zeiger auf einen Zeiger auf Integer auf, die Funktion erwartet aber einen Zeiger auf Integer. Mach also das & weg.



  • Danke so hat es funktioniert:

    #define BIT0 0
    #define BIT1 1
    #define BIT2 2
    #define BIT3 3
    #define BIT4 4
    #define BIT5 5
    #define BIT6 6
    #define BIT7 7
    
    void set_bit(int position, int worth, int* integer);
    
    void better_set_bit(int start, int end, int worth, int* integer)
    {
    	while(start <= end)
    	{
    		set_bit(start, worth, integer);
    		start++;
    	}
    }
    
    void set_bit(int position, int worth, int* integer)
    {
    	*integer = (worth << position);
    }
    
    int main(void)
    {
    	int val;
    
    	//...
    	better_set_bit(2, 6, 1, &val);
    	//...
    
    	return 0;
    }
    


  • Brauch's die Vorwärtsdeklaration von set_bit ?



  • Jo



  • asfdlol schrieb:

    Jedoch würde ich - wenn sie nicht aus einem anderen Grund benötigt werden - Vorwärtsdeklarationen vermeiden (Redundanz / DRY). Daher einfach die Reihenfolge umkehren und main als letzte Funktion definieren.

    Denkst du, das hier gilt ausschliesslich für die main -Funktion oder lässt sich das auch auf andere Funktionen verallgemeinern?
    Und hätte ich diese Suggestivfrage eben gestellt wenn ich gewusst hätte, dass es sie braucht?

    Edit: Kann kein Deutsch.



  • Bei Compiler-Fehlern immer erst den ersten behandeln. Der Rest könnten Folgefehler oder ähnliche Fehler sein.

    NewIsNew liegt falsch, wenn set_bit vor better_set_bit geschoben wird, braucht es keine Vorwärtsdeklaration.


Anmelden zum Antworten