Deklaration vom Array, Console, Cast's uvm

Hi!
Hab wieder eine ungeheure Anfängerfrage:

Warum funzt der Code nicht?

//Aus dem Zusammenhang gerissen:
int i=5;
i++;
const int a=i;
char c[a];

Der Code ist in dieser Form zwar unsinnvoll ist aber eine von mir am VCpp Compiler getestete Verinfachung meines Problems. Der Compiler gibt mir drei Fehler:
1.) expecting constant …
// Glaube das er damit meint, dass er a nicht als constant ansieht, weil sich i verändern kann
2.) cannot allocate an array with a value of 0 oder so ähnlich
und noch ein dritter den ich leider grade nicht zitieren kann(glaub war irgend was mit c hasn’t got a value ).

Scheinen alle drei Zusammenzuhängen. Kann mir vielleicht jemand sagen was man da tun kann? Habs schon mit einem const_cast für i versucht keine wirkung.

Dan noch ein zweites PRoblem. Ist eigentlich das selbe wie das aus dem Forumseintrag hier drunter.
Wie kann man einen String in ein array aus char#s sprich also zur Anfangsadresse eines char Arrays = const char* casten? gibt es dazu funktionen? Dies ist zum Beispiel dazu notwendig um an system() eine Variable als Parameter zu geben…

Nun meine letzte Frage: Gibt es eine Substringfunktion mit der man Strings *zerschneiden * kann? Die lezte Frage scheint sehr doof, weil man sowas ja eigentlich in Docus nachschaut, aber da ich hier schon gerade am posten bin stell ich sie gleich mit(falls ich nichts finde). werd trotzdem nochmal schaun.

Gruß und schonmal danke für alle Antworten Gruß rundell32

Achja könnte ja nochmal unter dem Eintrag–>Die Übrigen Ungeklärten Fragen nachschaun. Die sind alle noch ohne antwort!

Hallo rundell32,

Warum funzt der Code nicht?

//Aus dem Zusammenhang gerissen:
int i=5;
i++;

Diese beiden Werte stehen erst zur Laufzeit zur Verfügung !

const int a=i;

Hier hast du ein ähnliches Problem:
const besagt, dass a zur Laufzeit nicht verändert werden darf, allerdings ist der Wert von i erst zur Laufzeit bekannt.

char c[a];

Tja und hier hast du das gleiche Problem:
Der Compiler soll fest Speicher für a reservieren, aber da a erst zur Laufzeit bekannt ist, kann der Compiler das ja nicht machen …

#define SIZE 5
const int a=SIZE+1;

char c[SIZE+1];

Dan noch ein zweites PRoblem. Ist eigentlich das selbe wie das
aus dem Forumseintrag hier drunter.
Wie kann man einen String in ein array aus char#s sprich also
zur Anfangsadresse eines char Arrays = const char* casten?
gibt es dazu funktionen? Dies ist zum Beispiel dazu notwendig
um an system() eine Variable als Parameter zu geben…

MAch mal ein Beispiel.

Nun meine letzte Frage: Gibt es eine Substringfunktion mit der
man Strings *zerschneiden * kann? Die lezte Frage scheint sehr
doof, weil man sowas ja eigentlich in Docus nachschaut, aber
da ich hier schon gerade am posten bin stell ich sie gleich
mit(falls ich nichts finde). werd trotzdem nochmal schaun.

Schau mal nach den Functionen welche mit str…() anfangen.

Achja könnte ja nochmal unter dem Eintrag–>Die Übrigen
Ungeklärten Fragen nachschaun. Die sind alle noch ohne
antwort!

Eigentlich hast du da Antworten erhalten, aber scheinbar verstehst du sie nicht, da dir einiges an Grundlagen fehlt.
Auf Grund der hier gestellten Frage, hast du auch eindeutig deine eBOOKS auch noch nicht durchgearbeitet. Wie schon erwähnt, ist es nicht Aufgabe dieses Forums Grundlagen-Kurse abzuhalten, dafür gibt es schon genügend Bücher und Kurse (auch im Netz und gratis).

MfG Peter(TOO)

Hallo! Ich versuch meine Fragen nochmal deutlicher zu stellen:

//Aus dem Zusammenhang gerissen:
int i=5;
i++;

Diese beiden Werte stehen erst zur Laufzeit zur Verfügung !

const int a=i;

Hier hast du ein ähnliches Problem:
const besagt, dass a zur Laufzeit nicht
verändert werden darf, allerdings ist der Wert von i erst zur
Laufzeit bekannt.

char c[a];

Tja und hier hast du das gleiche Problem:
Der Compiler soll fest Speicher für a reservieren, aber da a
erst zur Laufzeit bekannt ist, kann der Compiler das ja nicht
machen …

#define SIZE 5
const int a=SIZE+1;

char c[SIZE+1];

Das es sich um einen Fehler handelt habe ich erkannt und das man ein array mit nicht in Laufzeit berechneten Werten deklarieren kann(siehe dein Makro Beispiel) weiß ich auch. Mein Problem ist–>
Ich möchte den Speicher für das Array erst in der Laufzeit vergeben:
Danach bleibt es dann auch konstant. Ich verstehe auch nicht was da das Problem ist. Andere Programmiersprachen wie Java machen dies möglich. Ein Beispielprogramm wäre eine Benutzereingabe, die die größe eines Arrays bestimmt. Wie also kann man soetwas umsetzen?

Dan noch ein zweites PRoblem. Ist eigentlich das selbe wie das
aus dem Forumseintrag hier drunter.
Wie kann man einen String in ein array aus char#s sprich also
zur Anfangsadresse eines char Arrays = const char* casten?
gibt es dazu funktionen? Dies ist zum Beispiel dazu notwendig
um an system() eine Variable als Parameter zu geben…

MAch mal ein Beispiel.

Gerne!
//Kleines Programmbeispiel
#include
#include
#include
//…
string a;
cin>>a;
system(„hallo.exe“);
//hallo.exe ist ein const char* also ein Array aus chars
//system(a); Wäre ein Konvertierungsfehler
//…

Wie also macht man aus einem String ein const char*
Hab’S bereits mit casten versucht

Nun meine letzte Frage: Gibt es eine Substringfunktion mit der
man Strings *zerschneiden * kann? Die lezte Frage scheint sehr
doof, weil man sowas ja eigentlich in Docus nachschaut, aber
da ich hier schon gerade am posten bin stell ich sie gleich
mit(falls ich nichts finde). werd trotzdem nochmal schaun.

Schau mal nach den Functionen welche mit str…() anfangen.

Achja könnte ja nochmal unter dem Eintrag–>Die Übrigen
Ungeklärten Fragen nachschaun. Die sind alle noch ohne
antwort!

Eigentlich hast du da Antworten erhalten, aber scheinbar
verstehst du sie nicht, da dir einiges an Grundlagen fehlt.
Auf Grund der hier gestellten Frage, hast du auch eindeutig
deine eBOOKS auch noch nicht durchgearbeitet. Wie schon
erwähnt, ist es nicht Aufgabe dieses Forums Grundlagen-Kurse
abzuhalten, dafür gibt es schon genügend Bücher und Kurse
(auch im Netz und gratis).

Wohl war ich bin noch im lehrnprozess und ich dachte gerade dazu gibt es dieses Forum um Fragen zu stellen, bei denen man ohne Hilfe nicht weiterkommt. Letztendlich würden sich natürlich alle hier gestellten Fragen(nicht nur die von mir gestellten) erübrigen, wenn man sich die gesammte weltlitheratur über c++ einverleibt hat.
Ich bin immer noch dabei meine EBOOKS durchzuarbeiten und habe bei verständnisfragen keine anderen ansprechpartner als dich/euch!

Achja könnte ja nochmal unter dem Eintrag–>Die Übrigen
Ungeklärten Fragen nachschaun. Die sind alle noch ohne
antwort!

Eigentlich hast du da Antworten erhalten,

Antworten erkenne ich daraus zwar nicht aber damit mir doch noch jemand hilft hier die Fragen:

1.)Declaration Syntax Error
//Mein Code store.h
namespace bereich{ }
in einer sonst leeren HEaderdatei ein Declaration Syntax
Error ist
also mit VC++6 gibt das keinen fehler.
Das heißt das liegt am Compiler? Ich verwende einen Borland
compiler…

Visal C++: geht
GCC: geht
Borland: geht nicht

Mach mal ein Semikolon rein: namespace bereich{ ; }

Das Semikolon verändert leider gar nichts…
Gibt es eine Möglichkeit die auch bei Borland Compiler möglich zu machen?

2.)Warum ich mein Struct ebenfalls in einer HEaderdatei
nicht:
//Mein Code store.h
struct st{int i;};
typedef st& typ;
//ende
mit typedef verwenden kann (in einer .cpp funzt es so)
aber:
//Anderer Code store.h
struct st2{int i;};
typedef struct st2 typ2;
//ende
funktioniert.

Da hast Du ein falsches Konzept im Schädel :wink:

Variante struct st { int i; };
typedef st& typ;

Ich seh leider keinen Unterschied zu meiner nicht funktionierenden ersten Variante im HEader:

//Erste Variante store.h
struct st{int i;};
typedef st& typ;
//ende

Wie gesagt funktioniert diese nicht, die zweite:

//Variante 2 store.h
struct st2{int i;};
typedef struct st2 typ2;
//ende

jedoch schon!

im Header und
main() {
st myStruct;
typ myRef = myStruct;
… in store.cpp funktioniert ausgezeichnet. Dabei wird
eine Referenz auf myStruct erzeugt. Du kannst nur
nicht typ myRef; schreiben, da die Referenz dann nichts :dereferenziert.

3.) Warum ich nicht in ne header datei includen kann

also normalerweise sollte das gehen.
Das geht und ist auch üblich so.

Fehlermeldung von meinem Compiler: Must use c++ for stdcomp.h Ich blick das net mehr!
Das heisst, der Compiler meint, er würde jetzt ein C-Programm erzeugen – und beschwert sich über „Klassen“ und dergleichen. Möglicherweise muss beim Borland das Quellfile immer .cpp oder so heissen und nicht .c oder .cxx. Schau mal in die Dokumen- tation.

Ich weiß leider nicht was du mir damit sagen willst. MEine HEaderdatei heißt --> store.hAnsonsten benutze ich bloß .cpp und .h

4.)ist es richtig, dass es sich bei f(char **chary); nicht mehr um einen pointer handelt, sondern den Inhalt eines Arrays aus chars(Das als Argument für f genommen wird)? Das ist sehr simpel. 1) char b; 2) char ab[8]; 3) char* zb; 4) char** zzb; 1 - b ist ein Zeichen, z.B. ‚x‘ 2 - ab ist eine Konstante, die Anfangsadresse eines Feldes von 8 Zeichen 3 - zb ist eine Variable, in der die Adresse von einem Zeichen drinsteht (ein Zeiger auf Zeichen) 4) - zzb ist eine Variable, in der die Adresse von einem Zeiger auf ein Zeichen drinsteht Hinweis: Da an der Anfangsadresse des Feldes 2) auch schon ein Zeichen steht, kann man auch schreiben zb = ab; d.h. die konstante Feldaddresse „ab“ steht jetzt im Zeiger zb.

Danke! Dieser Zusammenhang wird mir schon viel klarer!Könntest du mir vielleicht ein Beispiel für eine Sinnvolle verwendung von: char** zzb; zeigen oder zumindest erklären warum das die Parameterübergabe in main() nicht einfach sovoid main(int args,char[]){…}heißen kann sondern noch einen pointer enthalten muss?

:wink: Auf jeden Fall Danke das ihr euch immer noch die Mühe macht mir mit meinen *nervigen Fragen* zu helfen!Gruß rundell32

Hallo rundell32,

Ich versuch meine Fragen nochmal deutlicher zu stellen:

#define SIZE 5
const int a=SIZE+1;

char c[SIZE+1];

Das es sich um einen Fehler handelt habe ich erkannt und das
man ein array mit nicht in Laufzeit berechneten Werten
deklarieren kann(siehe dein Makro Beispiel) weiß ich auch.

Dann stell doch die Frage:

„Wie kann man ein array zur Laufzeit erstellen“

Mein Problem ist–>
Ich möchte den Speicher für das Array erst in der Laufzeit
vergeben:
Danach bleibt es dann auch konstant. Ich verstehe auch nicht
was da das Problem ist. Andere Programmiersprachen wie Java
machen dies möglich. Ein Beispielprogramm wäre eine
Benutzereingabe, die die größe eines Arrays bestimmt. Wie also
kann man soetwas umsetzen?

MAch mal ein Beispiel.

Gerne!
//Kleines Programmbeispiel
#include
#include
#include
//…
string a;
cin>>a;
system(„hallo.exe“);
//hallo.exe ist ein const char* also ein Array aus chars
//system(a); Wäre ein Konvertierungsfehler
//…

jetzt bist du ganz lustig geworden.
Deine ursprüngliche Frage war eine C -Frage,
jetzt machst du daraus ein C++ -Frage !

Wie also macht man aus einem String ein const char*
Hab’S bereits mit casten versucht

Lies bitte zuerst einmal deine Bücher weiter, bis du verstanden hast wo der Unterschied zwischen einem (C++) string und einem © char array [] liegt.

Nun meine letzte Frage: Gibt es eine Substringfunktion mit der
man Strings *zerschneiden * kann? Die lezte Frage scheint sehr
doof, weil man sowas ja eigentlich in Docus nachschaut, aber
da ich hier schon gerade am posten bin stell ich sie gleich
mit(falls ich nichts finde). werd trotzdem nochmal schaun.

Schau mal nach den Functionen welche mit str…() anfangen.

Auch hier stellt sich natürlich die Frage ob du C oder C++ strings meinst ???

Wohl war ich bin noch im lehrnprozess und ich dachte gerade
dazu gibt es dieses Forum um Fragen zu stellen, bei denen man
ohne Hilfe nicht weiterkommt. Letztendlich würden sich
natürlich alle hier gestellten Fragen(nicht nur die von mir
gestellten) erübrigen, wenn man sich die gesammte
weltlitheratur über c++ einverleibt hat.
Ich bin immer noch dabei meine EBOOKS durchzuarbeiten und habe
bei verständnisfragen keine anderen ansprechpartner als
dich/euch!

Also entweder sind deine Unterlagen alle didaktisch komplette Sch…e oder du gehst sie nicht systematisch durch.

Eigentlich hast du da Antworten erhalten,

Antworten erkenne ich daraus zwar nicht aber damit mir doch
noch jemand hilft hier die Fragen:

Visal C++: geht
GCC: geht
Borland: geht nicht

Mach mal ein Semikolon rein: namespace bereich{ ; }

Das Semikolon verändert leider gar nichts…
Gibt es eine Möglichkeit die auch bei Borland Compiler möglich
zu machen?

Nochmals zu den Grundlagen:
ANSI schreibt das meiste vor, allerdings gibt es einige Dinge welche den Compilerbauer überlassen werden, so z.B. ob char in der Grundeinstellung ein Vorzeichenbehafteter Wert ist oder nicht. Weiterhin ist festgelegt, dass ein char nicht grösser als int sein darf, es steht aber nirgends, dass ein char 8-Bit haben muss.
Weiterhin muss bei jedem Compiler dokomentiert sein, wie diese Dinge implementiert wurden und wo es evtl. Abweichungen von Standard gibt.

2.)Warum ich mein Struct ebenfalls in einer HEaderdatei
nicht:
mit typedef verwenden kann (in einer .cpp funzt es so)
aber:

Da hast Du ein falsches Konzept im Schädel :wink:

Auch hier wieder die Grundlagen:
es macht einen Unterschied WO eine Definition oder Declaration gemacht wird, ob innerhalb eines Kontext oder ausserhalb. Hier musst du dich mal mit den gültigkeits und sichbarkeits Regeln von Defibitionen und Declarationen befassen. Was du hier falsch machst sieht man an deinem Codeschnippsel halt gar nicht.
Im Prinzip müsstest du deinen ganzen Source hier posten, aber da wird wohl keiner lust und zeit dazu haben sich da durch zuarbeiten.

MfG Peter(TOO)

Verweise
Guten Tag,

tut mir leid, aber bei dem von Dir Verfassten, ist zu viel Falsches dabei.
Lies Dich doch einfach mal durch die folgenden Seiten:

http://www.math.uni-wuppertal.de/~axel/skripte/oop/o…
http://volkard.de/vcppkold/inhalt.html

HI!

Das es sich um einen Fehler handelt habe ich erkannt und das
man ein array mit nicht in Laufzeit berechneten Werten
deklarieren kann(siehe dein Makro Beispiel) weiß ich auch.

Dann stell doch die Frage:

„Wie kann man ein array zur Laufzeit erstellen“

Puh… hätt ich ja gemacht wenn ich gewusst hätte, dass es in c++ nicht möglich ist ein array in laufzeit zu deffinieren.
Ich meine die normale Herangehensweise an eine solche Frage von deiner Seite her wäre doch gewesen:
–>Aha der Fehler ist: Er versucht das Array in Laufzeit zu deffinieren
–&gt:stuck_out_tongue_winking_eye:oste ich ihm was er anstattdessen machen kann
Da kein anderer Vorschlag kam, hab ich die Frage umformuliert:

Mein Problem ist–>
Ich möchte den Speicher für das Array erst in der Laufzeit
vergeben:
Danach bleibt es dann auch konstant. Ich verstehe auch nicht
was da das Problem ist. Andere Programmiersprachen wie Java
machen dies möglich. Ein Beispielprogramm wäre eine
Benutzereingabe, die die größe eines Arrays bestimmt. Wie also
kann man soetwas umsetzen?

Warum gibst du mir denn hierauf nun keine Antwort?

MAch mal ein Beispiel.

Gerne!
//Kleines Programmbeispiel
#include
#include
#include
//…
string a;
cin>>a;
system(„hallo.exe“);
//hallo.exe ist ein const char* also ein Array aus chars
//system(a); Wäre ein Konvertierungsfehler
//…

jetzt bist du ganz lustig geworden.
Deine ursprüngliche Frage war eine C -Frage,
jetzt machst du daraus ein C++ -Frage !

ich glaub hier versteh ich den Witz nicht*g*
1.) Ich progge bloß c++ die ganze Zeit schon
2.) ich weiß nicht wie du durch eine meiner Fragen darauf kommst, dass ich vorher nach einem c programm gefragt habe

Wie also macht man aus einem String ein const char*
Hab’S bereits mit casten versucht

Lies bitte zuerst einmal deine Bücher weiter, bis du
verstanden hast wo der Unterschied zwischen einem (C++)
string
und einem © char array []
liegt.

Bin der Meinung, dass ich den Unterschied kenne.

© char array []

Du sprichst von einem © char Array [] meinst hier warscheinlich aber c-String. Gegen die VErwendung von char arrays spricht ja wohl in c++ auch nichts. Was du meinst ist glaub ich das man diesen Typ unter C als C-String kennt. Wenn ich von einem String rede mein ich aber den c++ String aus . Meine Fareg(ganz einfach) ging einfach bloß um den Punkt wie macht man aus einem C++ String einen c-String also ein char array… Ich weiß nicht was man da missverstehen kann hab extra von String und char array gesprochen. Und da du die frage jetzt verstanden hast wäre es doch nett mich nicht auf meine Docus hinzuweisen(die konsultiere ich schon von alleine) sondern mir einen cast eine funktion oder sonst was zur Lösung zu nennen.

Nun meine letzte Frage: Gibt es eine Substringfunktion mit der
man Strings *zerschneiden * kann? Die lezte Frage scheint sehr
doof, weil man sowas ja eigentlich in Docus nachschaut, aber
da ich hier schon gerade am posten bin stell ich sie gleich
mit(falls ich nichts finde). werd trotzdem nochmal schaun.

Schau mal nach den Functionen welche mit str…() anfangen.

Auch hier stellt sich natürlich die Frage ob du C oder C++
strings meinst ???

Meiner Meinung nach sollte man das C char array nicht string nennen führt bloß zu typverwechselung
Ich meine wie immer in meinen Fragen den c++ Typ

Wohl war ich bin noch im lehrnprozess und ich dachte gerade
dazu gibt es dieses Forum um Fragen zu stellen, bei denen man
ohne Hilfe nicht weiterkommt. Letztendlich würden sich
natürlich alle hier gestellten Fragen(nicht nur die von mir
gestellten) erübrigen, wenn man sich die gesammte
weltlitheratur über c++ einverleibt hat.
Ich bin immer noch dabei meine EBOOKS durchzuarbeiten und habe
bei verständnisfragen keine anderen ansprechpartner als
dich/euch!

Also entweder sind deine Unterlagen alle didaktisch komplette
Sch…e oder du gehst sie nicht systematisch durch.

Wenn du es so siehst würd ich auf ersteres Tippen, weil der
system(""); Befehl eingeführt wurde bevor ein C-String den diese als Parameter ninmmt erklärt wurde. ISt dieses Forum nicht gerade für solche Fragen da?

Eigentlich hast du da Antworten erhalten,

Antworten erkenne ich daraus zwar nicht aber damit mir doch
noch jemand hilft hier die Fragen:

Visal C++: geht
GCC: geht
Borland: geht nicht

Mach mal ein Semikolon rein: namespace bereich{ ; }

Das Semikolon verändert leider gar nichts…
Gibt es eine Möglichkeit die auch bei Borland Compiler möglich
zu machen?

Nochmals zu den Grundlagen:
ANSI schreibt das meiste vor, allerdings gibt es einige Dinge
welche den Compilerbauer überlassen werden, so z.B. ob char in
der Grundeinstellung ein Vorzeichenbehafteter Wert ist oder
nicht. Weiterhin ist festgelegt, dass ein char nicht grösser
als int sein darf, es steht aber nirgends, dass ein char 8-Bit
haben muss.
Weiterhin muss bei jedem Compiler dokomentiert sein, wie diese
Dinge implementiert wurden und wo es evtl. Abweichungen von
Standard gibt.

Was hat das den jetzt mit meinen Namespace Problem zu tun?Oder möchtest du damit auf die verschiedenen Compilerbauarten hinweisen?
Dann lies doch bitte den letzten Satz in dem die Erkenntnis bereist steht, das das mit Borland nicht funzt und beatworte die Frage warum borland gearde namespace nicht unterstützt und was man als äquivalent nehmen kann

2.)Warum ich mein Struct ebenfalls in einer HEaderdatei
nicht:
mit typedef verwenden kann (in einer .cpp funzt es so)
aber:

Da hast Du ein falsches Konzept im Schädel :wink:

Auch hier wieder die Grundlagen:
es macht einen Unterschied WO eine Definition oder Declaration
gemacht wird, ob innerhalb eines Kontext oder ausserhalb. Hier
musst du dich mal mit den gültigkeits und sichbarkeits Regeln
von Defibitionen und Declarationen befassen. Was du hier
falsch machst sieht man an deinem Codeschnippsel halt gar
nicht.
Im Prinzip müsstest du deinen ganzen Source hier posten, aber
da wird wohl keiner lust und zeit dazu haben sich da durch
zuarbeiten.

MfG Peter(TOO)

Mein gesammter Code steht in diesen Codeschnipseln drinn. Es ist wie gesagt bloß eine Kopie des Threads Anfängerfragen

Ich will mich entschuldigen wenn mein *Kommentarton* manchmal leicht genervt ist und wenn ich manchmaöl bloß bruchstückinformationen gebe und möchte euch insebsonders dir Peter(Schreibst dir ja beinahe die FInger wund) für eure Antworten Danken.

Ich denke ich werds jetzt AUFGEBEN hier zu versuchen Fragen zu stellen
bis jetzt hat mir nämlich wirklich immer das weitergeholfen auf das Peter sich alzu gerne beruft:
Eine gute Docu

Gruß rundell32

Guten Tag,

tut mir leid, aber bei dem von Dir Verfassten, ist zu viel
Falsches dabei.

Falsch? Wie meinst du das?