Anzeige:
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 15 von 35

Thema: Newbie mit ersten C++ Problemen

  1. #1
    Registrierter Benutzer
    Registriert seit
    06.01.2006
    Beiträge
    37

    Newbie mit ersten C++ Problemen

    Hallo, ich hab mal angefangen mich durch einige C++ Tutorials zu kämpfen, leider bin ich schon beim ersten c++ Programm gescheitert und weiss nicht genau wieso!
    Das Code sieht so aus:
    1: /* Das erste Programm:


    2: Summe der Zahlen von 1 bis 10


    3: */


    4:


    5: include <iostream>


    6:


    7: int main(void)


    8: {


    9: // Variable deklarieren und initialisieren


    10: int zahl;


    11: zahl = 0;


    12:


    13: // Schleife durchlaufen


    14: for (int i = 1; i <= 10; i++)


    15: {


    16: zahl += i;


    17: cout << "Summe bis " << i << ": ";


    18: cout << zahl << "\n";


    19: }


    20: }


    Wenn ich dann versuche mittels gcc dasErste.cpp den Code umzuwandeln bekomme ich folgenden Fehler:

    dasErste.cpp:1: error: expected unqualified-id before numeric constant


    Was bedeutet das und was kann ich dagegen machen?

    Hab den code in Kwrite geschrieben! gcc hab ich in version 4.0.2

    Danke für die Hilfe
    Suse 10.2 64
    Intel Quad Core
    4Gbyte Ram
    Geforce8

  2. #2
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Code-Tag wär in einem solchen Fall nicht schlecht:

    Code:
    1: /* Das erste Programm:
    2: Summe der Zahlen von 1 bis 10
    3: */
    4:
    5: include <iostream>
    6:
    7: int main(void)
    8: {
    9: // Variable deklarieren und initialisieren
    10: int zahl;
    11: zahl = 0;
    12:
    13: // Schleife durchlaufen
    14: for (int i = 1; i <= 10; i++)
    15: {
    16: zahl += i;
    17: cout << "Summe bis " << i << ": ";
    18: cout << zahl << "\n";
    19: }
    20: }
    1) Ich hoffe mal: Die Zeilennummern sind beim Kompilieren draussen?!

    2) #include<iostream>

    3) std::cout << und nicht einfach cout schreiben!!! (könnte man zwar mit "using namespace std" ist aber trotz mehr schreibaufwand NICHT zu empfehlen!)

    4) Sichere Zeilenumbrüche: std::endl;

    MfG Bischi
    Geändert von bischi (06-01-2006 um 11:58 Uhr)

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  3. #3
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    4) Sichere Zeilenumbrüche: std::endl;
    "\n" ist meistens schon okay. std::endl flusht halt noch den Stream, aber das brauch man ja auch nicht nach jeder Ausgabe machen.

    Coolzero:
    Statt der Variablendefintion "int zahl;" gefolgt von der Zuweisung "zahl = 0;" kannst du auch gleich nur die Definition "int zahl = 0;" oder "int zahl(0);" schreiben. Das wird als besserer Stil angesehen, weil Definition+Zuweisung im Prinzip unnötigen Aufwand darstellt, im Vergleich zu nur der Definition. Ähnliches gilt für das Postinkrement "i++" in deiner For-Schleife. Mach daraus "++i". Wenn du das mit dem Postinkrement so aus einem Tuturial gelernt hast: Nimm ein anderes Tuturial! Oder ein gutes Buch.

  4. #4
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Zitat Zitat von locus vivendi
    "\n" ist meistens schon okay. std::endl flusht halt noch den Stream, aber das brauch man ja auch nicht nach jeder Ausgabe machen.
    Da bin ich aber bös anderer Meinung!!! Je nach Betriebssystem besteht der Zeilenumbruch nicht nur aus einem \n (=newline) sondern auch noch aus einem \r (=carriage-return). Somit ist ein \n ungleich Zeilenumbruch und macht je nach Betriebssystem Probleme.

    Coolzero:
    Statt der Variablendefintion "int zahl;" gefolgt von der Zuweisung "zahl = 0;" kannst du auch gleich nur die Definition "int zahl = 0;"
    Ja!
    oder "int zahl(0);" schreiben.
    Besser nicht - das suggeriert mir, dass C++ vollständig Objektorientiert ist und führt vor allem für Anfänger nur zu Verwirrung. IMHO besser obere erste Variante!

    Ähnliches gilt für das Postinkrement "i++" in deiner For-Schleife. Mach daraus "++i".
    Wieso weisst du, welches in diesem Fall das richtige ist? Das ist überhaupt nicht klar - da du nicht genau weisst, was er machen will! ++i heisst: Erhöhe i um eins und mache dann den Rest der Anweisung. i++ heisst: Mache zuerst die Anweisung und erhöhe i danach um eins.


    Nimm ein anderes Tuturial! Oder ein gutes Buch.
    Dem schliess ich mich an...

    MfG Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  5. #5
    Registrierter Benutzer
    Registriert seit
    06.01.2006
    Beiträge
    37

    re

    Erstmal Danke für die Hilfe, hab den Code mal so abgeändert:

    /* Das erste Programm:


    Summe der Zahlen von 1 bis 10


    */





    #include <iostream>




    int main(void)

    {


    // Variable deklarieren und initialisieren


    int zahl = 0;




    // Schleife durchlaufen


    for (int i = 1; i <= 10; i++)


    {

    zahl += i;


    std::cout << "Summe bis " << i << ": ";


    std::cout << zahl << "\n";


    }


    }


    Hoffe das ist besser, bekomme jetzt folgende Meldung:
    gcc dasErste.cpp
    /tmp/ccz9MKJL.o: In function `main':
    dasErste.cpp:(.text+0x3d): undefined reference to `std::cout'
    dasErste.cpp:(.text+0x42): undefined reference to `std::basic_ostream<char, std:
    :char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostre
    am<char, std::char_traits<char> >&, char const*)'
    dasErste.cpp:(.text+0x51): undefined reference to `std::basic_ostream<char, std:
    :char_traits<char> >::operator<<(int)'
    dasErste.cpp:(.text+0x62): undefined reference to `std::basic_ostream<char, std:
    :char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostre
    am<char, std::char_traits<char> >&, char const*)'
    dasErste.cpp:(.text+0x70): undefined reference to `std::cout'
    dasErste.cpp:(.text+0x75): undefined reference to `std::basic_ostream<char, std:
    :char_traits<char> >::operator<<(int)'
    dasErste.cpp:(.text+0x86): undefined reference to `std::basic_ostream<char, std:
    :char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostre
    am<char, std::char_traits<char> >&, char const*)'
    /tmp/ccz9MKJL.o: In function `__tcf_0':
    dasErste.cpp:(.text+0xaf): undefined reference to `std::ios_base::Init::~Init()'
    /tmp/ccz9MKJL.o: In function `__static_initialization_and_destruction_0(int, int
    )':
    dasErste.cpp:(.text+0xdc): undefined reference to `std::ios_base::Init::Init()'
    /tmp/ccz9MKJL.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
    collect2: ld returned 1 exit status
    Coolzero@linux:~/Documents/C++> gcc dasErste.cpp
    /tmp/ccRsdGOC.o: In function `main':
    dasErste.cpp:(.text+0x3d): undefined reference to `std::cout'
    dasErste.cpp:(.text+0x42): undefined reference to `std::basic_ostream<char, std: :char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostre am<char, std::char_traits<char> >&, char const*)'
    dasErste.cpp:(.text+0x51): undefined reference to `std::basic_ostream<char, std: :char_traits<char> >::operator<<(int)'
    dasErste.cpp:(.text+0x62): undefined reference to `std::basic_ostream<char, std: :char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostre am<char, std::char_traits<char> >&, char const*)'
    dasErste.cpp:(.text+0x70): undefined reference to `std::cout'
    dasErste.cpp:(.text+0x75): undefined reference to `std::basic_ostream<char, std: :char_traits<char> >::operator<<(int)'
    dasErste.cpp:(.text+0x86): undefined reference to `std::basic_ostream<char, std: :char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostre am<char, std::char_traits<char> >&, char const*)'
    /tmp/ccRsdGOC.o: In function `__tcf_0':
    dasErste.cpp:(.text+0xaf): undefined reference to `std::ios_base::Init::~Init()'
    /tmp/ccRsdGOC.o: In function `__static_initialization_and_destruction_0(int, int )':
    dasErste.cpp:(.text+0xdc): undefined reference to `std::ios_base::Init::Init()'
    /tmp/ccRsdGOC.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
    collect2: ld returned 1 exit status


    Das Tutorial stammt von http://www.cpp-entwicklung.de/cpplin...ain/node4.html

    Gibts sonst gute die ihr mir zum einstieg empfehlen könnt!?
    Suse 10.2 64
    Intel Quad Core
    4Gbyte Ram
    Geforce8

  6. #6
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Nach mir müsste das ganze so aussehen (ungetestet):

    Code:
     /* Das erste Programm:
    Summe der Zahlen von 1 bis 10
    */
    
    
    #include<iostream>
    
    int main()
    {
      // Variable deklarieren und initialisieren
      
      int zahl = 0;
    
      // Schleife durchlaufen
    
      for (int i = 1; i <= 10; i++)
      {
        zahl += i;
        std::cout << "Summe bis " << i << ": "<< std::endl;
    
        std::cout << zahl << std::endl; 
      }
    
      return 0;
    }
    MfG Bischi

    UND! Mittels g++ und nicht gcc compilieren!!! (gcc= Gnu C Compiler)

    Also etwa so: "g++ halloWelt.c -o Outputname"

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  7. #7
    Registrierter Benutzer
    Registriert seit
    27.07.2000
    Beiträge
    123
    und nutze bitte zum einfuegen von code die im forum integrierte markierung

    das ist das #-Symbol. das fuegt die anfangs und die ende-marke ein. den code kannst du dann zwischen die beiden marken setzen.

    das ganze kannst du dir dann in der vorschau anschauen. so ist das ganze aeußerst schwer zu lesen.

    gruesse
    reinhard

    Ps: thinking in c++ gibt es zum herunterladen ...
    oder suche mal nach scripten aus vorlesungen die sind auch gelegentlich in deutsch

  8. #8
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Du versuchst ein C++ Programm mit gcc, dem C-Compiler zu kompilieren.

    Kompiliere das Programm mit g++, dann sollte es gehen.

  9. #9
    Registrierter Benutzer
    Registriert seit
    05.01.2006
    Beiträge
    44
    Ich habe es so gemacht und getestet es funktioniert!!!

    Code:
    #include <stdio.h>
    
    int main(void)
    {
    	int zahl=0 , i;
    	
    	for ( i=1; i<11; i++)
    	{
    		zahl = zahl + i;
    	}
    	
    	printf ("Summe von 1 bis 10 = %i\n", zahl);
    
    	return 0;
    
    }
    Das Ergebnis:
    Summe von 1 bis 10 = 55
    Elektrotechnik Student

  10. #10
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Wir haben gerade gleichzeitig gepostet. Falls du es übersehen hast, lies dir mein Posting über deinem durch (g++, nicht gcc)

  11. #11
    Registrierter Benutzer
    Registriert seit
    05.01.2006
    Beiträge
    44
    Du versuchst ein C++ Programm mit gcc, dem C-Compiler zu kompilieren.
    Ja daran wird es auch wohl liegen. :-)
    Also ich würde dir empfehlen mit KDevelop zu arbeiten.

    Gruß

    Konstantin
    Elektrotechnik Student

  12. #12
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Zitat Zitat von Joghurt
    Wir haben gerade gleichzeitig gepostet. Falls du es übersehen hast, lies dir mein Posting über deinem durch (g++, nicht gcc)
    Naja hab ich ca. ne halbe stunde vorher auch schon geschrieben...

    MfG Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  13. #13
    Registrierter Benutzer
    Registriert seit
    06.01.2006
    Beiträge
    37

    re

    Mit c++ hat es geklappt!
    Danke für die Hilfe, befürchte nur das ich mich bald wieder melden werde!
    Suse 10.2 64
    Intel Quad Core
    4Gbyte Ram
    Geforce8

  14. #14
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    Zitat von locus vivendi
    "\n" ist meistens schon okay. std::endl flusht halt noch den Stream, aber das brauch man ja auch nicht nach jeder Ausgabe machen.
    Da bin ich aber bös anderer Meinung!!! Je nach Betriebssystem besteht der Zeilenumbruch nicht nur aus einem \n (=newline) sondern auch noch aus einem \r (=carriage-return). Somit ist ein \n ungleich Zeilenumbruch und macht je nach Betriebssystem Probleme.
    Das glaube ich nicht. Erstens kommt dieser Punkt so in der GNU libstdc++ FAQ vor (http://gcc.gnu.org/onlinedocs/libstd.../howto.html#2), zweitens habe ich auf deinen Einwand hin auch noch mal in der Dinkumware-Referenz nachgeschaut. Und daraus sehe ich, dass der endl-Manipulator als einzige Transformation eine Locale-spezifische Konvertierung durchführt. Spezieller: '\n' wird auf die Zeichenbreite des Streams erweitert ("widened"). Diese Konvertierung wird aber nicht dazu führen, dass aus Newline Carriage-Return + Newline wird. Und selbst wenn es so wäre: Die gleiche Konvertierung wird ebenfalls vorgenommen wenn man mit "stream << zeichen" einfach nur ein Zeichen ausgibt. Es macht also in der Beziehung keinen Unterschied, ob man endl verwendet oder '\n'.
    Kannst du denn tatsächlich ein abweichendes Verhalten produzieren?

    Zitat:
    Ähnliches gilt für das Postinkrement "i++" in deiner For-Schleife. Mach daraus "++i".
    Wieso weisst du, welches in diesem Fall das richtige ist? Das ist überhaupt nicht klar - da du nicht genau weisst, was er machen will! ++i heisst: Erhöhe i um eins und mache dann den Rest der Anweisung. i++ heisst: Mache zuerst die Anweisung und erhöhe i danach um eins.
    Hmm, in der Schleife macht das aber keinen Unterschied. Ich wollte auch nicht behaupten, und hoffe, dass das nicht so verstanden wurde, das ++i immer besser als i++ ist.

  15. #15
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Zitat Zitat von locus vivendi
    Hmm, in der Schleife macht das aber keinen Unterschied. Ich wollte auch nicht behaupten, und hoffe, dass das nicht so verstanden wurde, das ++i immer besser als i++ ist.
    Die heutigen C(++)-Compiler optimieren i++ zu ++i, wenn i nicht direkt gebraucht wird, von daher ist es egal. Wenn man allerdings mit STL-Iteratoren arbeitet, sollte man ++i in for-schleifen schreiben, da ansonsten immer "tmp = i; ++i; return tmp" ausgeführt wird.
    Natürlich ist das ein minimaler Overhead, wenn eine Schleife allerdings millionenmal durchlaufen werden wird, kann es besser sein, ++i zu schreiben.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •