einfaches C++ Programm ...Fehler
-
Hey Leute
hab mich an die C++ programmierung herangetraut und musste feststellen ,dass ich von Fehler Meldungen nur so erschlagen werde:#include <iostream.h> #include <conio.h> main(){ char Name = "Marcus"; char gebd = "7.10.1980"; std::cout << "Name = " << Name << "\n"; std::cout << "Geburtsdatum = " << gebd << "\n"; getch(); }C:\Programme\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\backward\backward_warning.h|32|warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.|
Sourcecodes\Untitled1.c||In functionint main()':| Sourcecodes\\Untitled1.c|5|error: invalid conversion from \const char*' to `char'|
Sourcecodes\Untitled1.c|6|error: invalid conversion from `const char*' to `char'|
||=== Build finished: 2 errors, 1 warnings ===|Kann mir irgendwer dieses wirrwarr in einer verständnlichereren Form erklären...
lg
pisco :xmas1:
-
1. du weist der variablen "char" einen stringliteral zu. Benutze char pointer oder std::string.
2. includiere "<iostream>", nicht "<iostream.h>". Dann stehen die Sachen auch im namepsace std
-
kann ich das auch mit cout irgendwie lösen?? So ist nämlich die Aufgabenstellung.
Schreib ein Programm, das Deinen Namen und Dein Geburtsdatum mit Hilfe des
Datenstromobjektes cout drei Mal am Bildschirm ausgibt. Definiere alle Variablen,
die Du verwendest m¨oglichst nahe ihrer Verwendung.lg
-
An cout liegts nicht.
Mach dir klar, dass char hier der falsche Datentyp ist. Ein char hält gerade mal 1 Zeichen. Was du suchst ist ein
std::string.Dann ist das noch der Rückgabetyp von main. Der ist nälich int.
Ich geb dir mal das Grundgerüst:
#include <iostream> // std::cout #include <string> // std::string int main () { //.. dein code }Dann musst du aber das ganze 3x ausgeben. Sprich du brauchst auch Schleifen. Ich hoffe du kennst die bereits.
-
Hey
erstmal danke für eure Hilfe... So ganz kenn ich mich immer noch nicht aus...hier mal der code mit Schleife:
#include <iostream> #include <string> #include <conio.h> main(){ char Name = "Marcus"; char gebd = "7.10.1990"; for(int i=0; i<3; i++){ std::cout << "Name = " << Name << "\n"; std::cout << "Geburtsdatum = " << gebd << "\n"; } getch(); }Sourcecodes\Untitled1.c||In function
int main()':| Sourcecodes\\Untitled1.c|6|error: invalid conversion from \const char*' to `char'|
Sourcecodes\Untitled1.c|7|error: invalid conversion from `const char*' to `char'|
||=== Build finished: 2 errors, 0 warnings ===|1. Welchen TYp muss ich name geben??
2. Warum schreibt man in C++ kein .h mer hinter die lib-Funktionen?lg :xmas2:
-
1. Das habe ich bereits oben gesagt.
2. Das ist reine Konvention. Das sind keine libs in dem Sinne, sondern "nur" Headerdateien. Kannst ja mal rechtsklick auf den Namen machen und dann "öffnen" oder so klicken, dann siehst du die komplette Implementierung.btw:
Das ganze wird jetzt aber 4 mal ausgegeben!
-
sorry drakon auch wenn mich deine geübte Coder-Hand zum Ziel führen will... Ich check zur Zeit gar nix mehr... Bin grad in einem Zustand totaler Verwirrtheit, da ich persönlich char als Typ für Name als angemessen halte. (Jedoch Du,der Compiler und der Rest der Welt auch nicht...) Die Gretchenfrage die sich mir stellt ist das Warum ist char nicht angemessen.

Hab mal versuch char wegzulassen, da OOP SPrachen sich ja den Typ selber suchen.. funzt auch nicht.

lg und bitte verrat mir die Lösung ,sonst werd ich noch wahnsinnig
mit diesem Programmpisco
-
C++ ist nicht dynamisch, sondern statisch typisiert, das heisst, dass zur Kompilierungszeit alle Typen bekannt und deklariert sein müssen. (Sprich du musst sie angeben)
Ganz einfach. Was heisst denn char auf Deutsch übersetzt? - Genau Zeichen. Und jetzt rat mal, wie viele Zeichen ein Zeichen aufnehmen kann? Genau nur eines.

Daher musst du einen string benutzen. Der Standardstring in C++ ist wohl
std::string, welcher unbeschränkt viele Zeichen aufnehmen kann. Also eine Zeichenkette ist.#include <string> int main () { char zeichen = 'a'; // beachte: nur ein hockomma! char zeichen_2 = 'ab'; // falsch. zu viele Zeichen std::string zeichenkette = "das ist ein string, der kann laaaaange werden!"; // beachte: dopptele Anführungszeichen }Das erste ist ja nur ein Zeichen, daher also auch ein char. Die Literale werden mit einfachen Anführungszeichen geschrieben. Das zweite ist falsch, da man versucht 2 Zeichen in ein char zu packen. Das ist schon prinzipiell falsch.
Das dritte schliesslich ist ein String, welcher beliebig viele Zeichen aufnehmen kann und in doppelte Anführungszeichen gesetzt wird.Klar geworden?
-
made my day...

lg

-
piscoster schrieb:
... da ich persönlich char als Typ für Name als angemessen halte. (Jedoch Du,der Compiler und der Rest der Welt auch nicht...) Die Gretchenfrage die sich mir stellt ist das Warum ist char nicht angemessen.
Hallo pisco,
'char' steht für Character also Zeichen - und genauer ein Zeichen. D.h. char ist angemessen dort genau ein Zeichen unterzubringen. Beispiel:
char c = 'z'Für den Namen bietet sich std::string an. Dies ist eine Klasse, die der C++-Standard definiert, und genau dafür gemacht ist 'beliebig' viele Zeichen aufzunehmen - Ergo:
std::string name = "Marcus";Gruß
Werner.. drakon war schneller

-
Werner Salomon schrieb:
.. drakon war schneller

Dachte jetzt gerade, warum du mich da fast zitierst. :p
Was hast du in den 11 Minuten nur gemacht? Kaffee geholt?

-
och leute, das muss doch nicht sein
gebt ihm doch einfach die einfachste
lösung, den rest wird er auch noch lernen...#include <iostream> #include <string> // NOCH überflüssig #include <conio.h> main() { char *Name = "Marcus"; char *gebd = "7.10.1990"; // einfach mal n sternchen davor ;) for(int i=0; i<3; i++) { std::cout << "Name = " << Name << "\n"; std::cout << "Geburtsdatum = " << gebd << "\n"; } getch(); }sollte das ein fehler geben, schreib mal
const char *stattchar *.das sternchen ist ein zeiger auf ein char, d.h. du speicherst
damit die addresse vom ersten zeichen. auf den rest kannst du "nicht"
zugreifen, aber da die zeichen ja eins nach dem anderen iim speicher
stehen, kommst du über die startaddresse an alle.Alternativ:
du kannst auch char-arrays verwenden:
char Name[] = "Marcus";d.h. das du jetzt mehrere (ein feld)
char's hast, die auch wieder
hinereinander stehen. so ähnlich wie beim zeiger.
-
och leute, das muss doch nicht sein
gebt ihm doch einfach die einfachste
lösungUnd die hatte er bereits.
Dein Code ist kein bisschen einfacher zumal du ihn auch überhaupt nicht erklärst ("einfach mal ein Sternchen davor" ...)
Außerdem wird er damit nur solange klarkommen, bis er versucht, die Strings zu kopieren, ihren Inhalt zu ändern, sie zu vergleichen oder aneinanderzuhängen.
-
kekzdoze schrieb:
och leute, das muss doch nicht sein
gebt ihm doch einfach die einfachste
lösung, den rest wird er auch noch lernen...Was soll denn jetzt der Mist?
Er lernt C++, also soll er auch die Sprachbedingten Wege lernen und nicht irgendwelches Zeugs, was man vor Jahrzenten gelehrt hat.
Dem TO scheint alles klar zu sein und er hat verstanden, wies geht. Jetzt kommst du und verwirrst durch deinen "besseren" Code, der ihn nur verwirren würde.
Ne, lass mal.
@piscoster
Vergiss das mit den Sternchen und eckigen Klammern vorerst mal noch. Das kommst später, wenn du dich mit den grundlegenderen Mitteln vertraut gemacht hast.