Anfängerfehler?
-
Dann gibt's auch keinen Fehler: http://ideone.com/ITnyyi
-
Wenn du es vergessen hast war es nicht Copy&Paste.
Code immer kopieren, nicht abschreiben.
-
@asfdlol
g++ zeigt trotzdem einen Fehler an@DarkShadow44
Weiß
-
NewIsNew schrieb:
@asfdlol
g++ zeigt trotzdem einen Fehler anDann 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
mainals 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
mainals 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.