Array of Boolean lässt sich nicht ändern
-
cooky451 schrieb:
g++ -std=c++0x -pedantic -Wall
-Wextra
wäre auch noch nicht schlecht. Und-Werror
, damit er die Warnungen nicht einfach ignorieren kann.
-
Hallo,
also die cpp Datei habe ich - das dahinter hab ich (nicht verstanden und deswegen) gegoogelt, aber ohne Erfolg.
Vielleicht könntest du mir einfach sagen, warum mein Compiler es nicht hätte bearbeiten dürfen, damit ich's beim nächsten Mal besser machen kannGanz davon abgesehen, macht das Programm wieder nun nur noch Schwachsinn (Fragt mich nicht warum
). Ich glaube fast, dass es sinnvoller ist, wenn ich einfach noch mal von vorne anfange.
Gruß Jörg
-
-Weffc++
-
wunreg schrieb:
cooky451 schrieb:
g++ -std=c++0x -pedantic -Wall
-Wextra
wäre auch noch nicht schlecht. Und-Werror
, damit er die Warnungen nicht einfach ignorieren kann.Ich habe nie irgendwelche Warnungen igonriert. Mein Programm hat einfach in der jetzigen Version keine ausgegeben
-------------- Build: Debug in primzahlen --------------- Compiling: main.cpp Linking console executable: bin\Debug\primzahlen.exe Output size is 588.48 KB Process terminated with status 0 (0 minutes, 0 seconds) 0 errors, 0 warnings
Alle Errors und Warnungen davor habe ich immer nach bestem Wissen behoben.
---
Ich erstell mir jetzt besser einen Acc, damit keine Doppelposts mehr kommen
-
wunreg schrieb:
cooky451 schrieb:
g++ -std=c++0x -pedantic -Wall
-Wextra
wäre auch noch nicht schlecht. Und-Werror
, damit er die Warnungen nicht einfach ignorieren kann.Vielleicht, als MSVC Nutzer habe ich erst mal nur das geschrieben, was mir eingefallen ist. Wobei ich meine mich zu erinnern, dass bei -Wextra manchmal komische Warnungen kommen, und als Anfänger möchte man das Programm ja zumindest mal testen, wenn man sich die Warnungen dann nicht später durchlesen kann (-Werror), kann das frustrieren.
@JörgK
Nicht von vorne anfangen, sondern aktuelles Programm posten.@JörgK schrieb:
das dahinter hab ich (nicht verstanden und deswegen) gegoogelt, aber ohne Erfolg.
Da du deine IDE nutzt, kannst du das bestimmt da einstellen. Irgendwie auf "Einstellungen->Compiler" oder so etwas, da kann man die Parameter sicher einstellen.
Das erste Beispiel oben hätte nicht kompilieren dürfen, weil (wie schon erwähnt) die Größe von Arrays in C++ eine Compilezeitkonstante muss, und der Rückgabetyp der Funktion nicht zu dem passt, was du zurückgegeben hast.
-
cooky451 schrieb:
@JörgK
Nicht von vorne anfangen, sondern aktuelles Programm posten.@JörgK schrieb:
das dahinter hab ich (nicht verstanden und deswegen) gegoogelt, aber ohne Erfolg.
Da du deine IDE nutzt, kannst du das bestimmt da einstellen. Irgendwie auf "Einstellungen->Compiler" oder so etwas, da kann man die Parameter sicher einstellen.
Das erste Beispiel oben hätte nicht kompilieren dürfen, weil (wie schon erwähnt) die Größe von Arrays in C++ eine Compilezeitkonstante muss, und der Rückgabetyp der Funktion nicht zu dem passt, was du zurückgegeben hast.
- Bittesehr:
#include <cstdlib> #include <cstdio> #include <iostream> using namespace std; bool primzahlenFinden (int a, int b) { bool hilfsarray [128]; int hilf; for ( hilf=0; hilf<128;hilf++) { hilfsarray[hilf]=1; } for ( ; a<=b ; a++) { // cout << "\na = " << a; for (hilf=2;hilf<a;hilf++) { // cout << "\nhilf = " << hilf; // cout << "\n" <<a<<" % "<<hilf<<" = " << (a % hilf); if (a % hilf == 0) { // cout << "\nhilfsarray["<<a<<"] davor = " << hilfsarray[a]; hilfsarray[a]=false; // cout << "\nhilfsarray["<<a<<"] danach = " << hilfsarray[a]; } } } return hilfsarray [128]; } int main() { int i; int untereGrenze; int obereGrenze; cout << "Geben Sie die Grezen an, in denen nach Primzahlen gesucht werden soll!" << endl; cout << "Untere Grenze: "; cin >> untereGrenze; cout << "Obere Grenze: "; cin >> obereGrenze; bool primarray[128]; primarray[128] = primzahlenFinden(untereGrenze, obereGrenze); for (i=untereGrenze;i<=obereGrenze;i++) { if ( not primarray[i] ) { cout << i << "\n"; } } system("PAUSE"); return 0; }
- Das mit dem std scheint er nicht zu verstehen:
-------------- Build: Debug in primzahlen --------------- mingw32-g++.exe -Wall -fexceptions -g -c "W:\Eigene Dateien\Eigene Dokumente\C++ Code\Conversion\primzahlen\main.cpp" -o obj\Debug\main.o -std=c++0x -pedantic -Wall cc1plus.exe: error: unrecognized command line option "-std=c++0x" Process terminated with status 1 (0 minutes, 0 seconds) 0 errors, 0 warnings
-
Lass das std=c++0x weg. Ist nicht so wichtig.
Du fällst schon wieder auf eine Eigenheit von Arrays rein: Man kann sie nicht zurückgeben. Ich empfehle dir, in deinem Buch weiterzulesen, bis du bei std::vector<> angelangt bist. Mit dem geht das nämlich.
Du solltest die Funktionssignatur so wählen:
void primzahlenFinden (int a, int b, bool hilfsarray [128])
Und dann aufrufen mit
primzahlenFinden(untereGrenze, obereGrenze, primarray);
BTW @pyhax: Weffc++ warnt, wenn man privat von boost::noncopyable erbt
-
Ja, -Weffc++ ist nicht immer sinvoll, deswegen nehme ich dazu immer noch -Wno-error=effc++ und -Wno-error=unused-parameter
-
Wunreg schrieb:
Du solltest die Funktionssignatur so wählen:
void primzahlenFinden (int a, int b, bool hilfsarray [128])
Und dann aufrufen mit
primzahlenFinden(untereGrenze, obereGrenze, primarray);
Gut, ich weiß, dass ich noch nicht viel weiß, aber müsste ich nicht, wenn ich nichts zurückgebe mit Zeigern arbeiten ?
So wie oben übergebe ich noch nur die Werte in primArray, ohne, dass diese dann geändert würden, oder?
-
Hmm, das ist eine weitere Eigenheit von Arrays: Als Parameter sind sie immer Zeiger.
Aber mit Zeigern geht es genauso, nur gehört es dann stilistisch dazu, ihre Grösse mit zu übergeben. Ändere das dahingehend, wenn du willst.
-
Wunreg schrieb:
Du solltest die Funktionssignatur so wählen:
void primzahlenFinden (int a, int b,bool hilfsarray [128])
Welchen Sinn soll es haben, das hilfsarray mit einer Größenangabe zu versehen?
-
Hab's jetzt wie folgt abgeändert:
// wie bisher... void primzahlenFinden (int a, int b, bool hilfsarray[128]) { int hilf; //wie bisher } int main() { //wie bisher bool primarray[128]; primzahlenFinden(untereGrenze, obereGrenze, primarray); //wie bisher }
Nun funktioniert alles wie es soll und es gibt auch mit den Parametern keine Errors oder Warungen.
Vielen Dank.
-
Du spielst immer noch russisches Roulette mit deiner Anwendung...
Wenn deine Anwendung an Zeile 23 und 28 vorbeikommt würde ich nicht weiterspielen, da haste bereits Glück genug gehabt