Array of Boolean lässt sich nicht ändern
-
wunreg schrieb:
cooky451 schrieb:
g++ -std=c++0x -pedantic -Wall
-Wextrawä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 warningsAlle 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
-Wextrawä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