char- Pointer- und logik Problem
-
Hyhy
ich habe vor ein paar Stunden angefangen ein kleines Programm zur
Übung zu schreiben, nur irgendwie komme ich jetzt leider nicht mehr weiter
:
Wieso kann ich meine Char- Zeiger nicht durch die Funktion, welche
ich geschrieben habe bearbeiten?
(ps: Da ich die Funktion selbst nicht als Fehlerursache betrachte, poste ich sie hier auch nicht.)zum Programm: Ich habe festgestellt, dass mein Programm, sofern es Fehlerfrei
laufen würde, bei jeder schließenden geschweiften Klammer ein Tab zu viel
ausgeben würde. Kann mir jemand bitte ein paar Tipps geben, wie ich dies verhindern kann?#include<iostream> #include<rwfile.h> #include<string> using namespace std; class chl { private: char *source; char *destination; int *numbers; int *brace_o; int *brace_c; int *loop; bool manual; bool mark_0; string tab; public: chl(); bool show(); bool dialog(); bool work(); }; chl::chl() { loop = new int; *loop = 1; brace_o = new int; *brace_o = 0; brace_c = new int; *brace_c = 0; numbers = new int; *numbers = 0; manual = false; mark_0 = false; source = new char[30]; destination = new char[30]; tab = " "; } bool chl::dialog() { bool manual_clear = false; cout << "automatic(0) or manual(1)? "; cin >> manual; cout << "source :"; cin >> source; cout << "destination :"; cin >> destination; switch(manual) { case'0' : { cout << "lines to read :"; cin >> *numbers; cout << "enter Tab(\"automatic\" for default :"; cin >> tab; if(tab == "automatic") tab = " "; cout << "how much brackets are open :"; cin >> *brace_o; cout << "clear bevore write(1) :"; cin >> manual_clear; if(manual_clear == 1) clear(*destination); // Das tut komischerweise, bzw. mein Compiler erkennt hier noch keinen Fehler... break; } work(); } } bool chl::work() { string in; while(*loop <= *numbers) { read(in, *source, *loop); // ...Das nicht mehr for(int i=0; i < in.length(); ++i) { if(in[i] == '{') ++*brace_o; else if(in[i] == '}') --*brace_o; } if(*brace_o >= 1) { cout << "(" << *brace_o << ")" << in << endl; if(mark_0) write("\n", *destination); /* write("(", destination); write(brace_o, destination); write(")", destination); */ write(in, *destination); write("\n", *destination); for(int i=1; i<=*brace_o; ++i) write(tab, *destination); mark_0 = false; } else if (*brace_o == 0) { write("\n", *destination); write(in, *destination); mark_0 = true;} ++*loop; } } int main() { chl c; c.dialog(); wait; }Ach ja: ich bin noch nicht fertig mit dem Programm, deshalb habe ich auch noch kein delete[] angewandt

Danke im vorraus!

-
Destruktor ...egal wie weit du bist!
-
Also ich frage mich vor allem, wieso du so viele new für normale int's benutzt.
Ansonsten wäre es ev. noch hilfreich, wenn du den Fehler vom Compiler posten würdest...
-
erstmal danke für eure schnellen Antworten...
(D)Evil schrieb:
Destruktor ...egal wie weit du bist!
jaa... eigentlich hast du vollkommen recht

drakon schrieb:
Also ich frage mich vor allem, wieso du so viele new für normale int's benutzt.
naja... wie schon gesagt: zur übung

Die Fehlermeldung:
In member function
bool chl::work()': 85 invalid conversion from \char' to `char*'
85 initializing argument 2 of `bool read(std::string&, char*, int)'die Zeiger sind doch char*, dachte ich, oder?
-
Hmm ne ist nen char:
read(in, *source, *loop);Du dereferenzierst hier source(und loop ...), was aber als
char *source;. D.h. du übergibst da gerade das 1. Zeichen des Strings source. Einfach nicht dereferenzieren!
-
(D)Evil schrieb:
Einfach nicht dereferenzieren!
naja... aber wenn ich nicht dereferenziere, fängt mein Programm gar nicht an zu arbeiten weil es doch gar keine werte
bekommt?!
(... gibt es eine möglichkeit die Dereferenzierung beizu
behalten?)EDIT: Achso: und wenn ich den source- Pointer ersetze durch "char source[30]" dann wäre dies doch auch ein Zeiger, oder (aber stimmt, damit geht es)???