1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

c++ bitte um hilfe

    • Frage
  • Ivy
  • 16. Oktober 2006 um 20:06
  • Unerledigt
  • Ivy
    22
    Ivy
    Mitglied
    Reaktionen
    35
    Punkte
    4.920
    Beiträge
    889
    • 16. Oktober 2006 um 20:06
    • #1

    hey!! i hab grad die hü gmacht für eprog und es funzt einfach nicht. es geht um ein baby-easy-programm: nämlich für ein rechteck-ausrechnungsdings.

    so schauts aus bei mir:

    #include <iostream>

    int main()
    {
    int l;
    int b;
    double A;
    double U;

    cout << " Bitten geben Sie die Laenge des Rechtecks ein ";
    cin >> l;
    cout << " Bitte geben Sie die Breite des Rechtecks ein ";
    cin >> b;

    A = l*b;
    cout << A;
    U = (2*l) + (2*b);
    cout << U;

    return 0;
    }


    aber es geht nicht

    es kommt immer diese meldung:

    rechteck.C:21:2: warning: no newline at end of file
    rechteck.C: In function 'int main()':
    rechteck.C:10: error: 'cout' was not declared in this scope
    rechteck.C:11: error: 'cin' was not declared in this scope

    Wer FU sagt, muss auch T sagen

  • master_fluc
    6
    master_fluc
    Mitglied
    Punkte
    345
    Beiträge
    57
    • 16. Oktober 2006 um 20:22
    • #2

    du musst nach dem

    Code
    #include <iostream>

    folgende Zeile schreiben:

    Code
    using namespace std;

    dann müssts gehen

    Better to reign in hell,
    than serve in heaven.
    (John Milton, Paradise Lost)

  • Lil_81
    6
    Lil_81
    Mitglied
    Reaktionen
    7
    Punkte
    337
    Beiträge
    66
    • 16. Oktober 2006 um 20:23
    • #3

    probiers mal mit:

    using namespace std;

    nach #include <iostream>

    dann sollten cin und cout deklariert sein

  • Ivy
    22
    Ivy
    Mitglied
    Reaktionen
    35
    Punkte
    4.920
    Beiträge
    889
    • 16. Oktober 2006 um 20:31
    • #4

    ajo. ma bin i dumm...hob i voi vergessen!!! danke

    wos genau bedeutet des "using namespace std;"??

    Wer FU sagt, muss auch T sagen

  • Swoncen
    22
    Swoncen
    Mitglied
    Reaktionen
    1
    Punkte
    5.331
    Beiträge
    993
    • 16. Oktober 2006 um 20:33
    • #5

    std ist der standard namespace.

    gib mal std:: ein, dann wirst du sehen, was da alles drinnen steckt..
    Ist im Prinzip wie ein include..

    640K ought to be enough for anybody. :eek2:

  • JohannesBuchner
    7
    JohannesBuchner
    Mitglied
    Punkte
    455
    Beiträge
    90
    • 16. Oktober 2006 um 20:58
    • #6
    Zitat von Swoncen

    std ist der standard namespace.

    gib mal std:: ein, dann wirst du sehen, was da alles drinnen steckt..
    Ist im Prinzip wie ein include..

    naja. include isses nicht wirklich, der Vergleich schmerzt. Du sagst mit std::cin, dass du das cin nehmen willst, das im namespace std definiert ist. Du könntest auch ein uberstd::cin definieren, dann ist es wichtig, dass du zwischen den cin-s auswählen kannst. Ist sozusagen eine Gruppierung. der namespace std wird von vielen stdlibs benutzt. Damit dein compiler weiß, dass du immer std::foo nehmen willst, wenn es global nicht definiert ist, schreibst du als fauler C-Programmierer "using namespace std".

    Zitat von Swoncen

    gib mal std:: ein, dann wirst du sehen, was da alles drinnen steckt..


    Swoncen: Ich nehme an, du meinst hier eine bestimmte IDE? welche?

    It's like the square root of one million ... no one will ever know.

  • Ivy
    22
    Ivy
    Mitglied
    Reaktionen
    35
    Punkte
    4.920
    Beiträge
    889
    • 16. Oktober 2006 um 21:02
    • #7

    okay ich bin ein fauler c-programmierer, deshalb schreib ich using namespace std. gg

    Wer FU sagt, muss auch T sagen

  • master_fluc
    6
    master_fluc
    Mitglied
    Punkte
    345
    Beiträge
    57
    • 16. Oktober 2006 um 22:21
    • #8
    Zitat von JohannesBuchner

    naja. include isses nicht wirklich, der Vergleich schmerzt. Du sagst mit std::cin, dass du das cin nehmen willst, das im namespace std definiert ist. Du könntest auch ein uberstd::cin definieren, dann ist es wichtig, dass du zwischen den cin-s auswählen kannst. Ist sozusagen eine Gruppierung.

    Namespaces haben nur den Sinn, unzureichende OOP zu kompensieren. :winking_face:

    Better to reign in hell,
    than serve in heaven.
    (John Milton, Paradise Lost)

  • sauzachn
    17
    sauzachn
    Mitglied
    Reaktionen
    51
    Punkte
    3.101
    Beiträge
    606
    • 16. Oktober 2006 um 22:23
    • #9
    Zitat von master_fluc

    Namespaces haben nur den Sinn, unzureichende OOP zu kompensieren. :winking_face:


    Wie kommst du auf die Idee?

    Dipper dipper dii dipper dii dipper dii duuu

  • sauzachn
    17
    sauzachn
    Mitglied
    Reaktionen
    51
    Punkte
    3.101
    Beiträge
    606
    • 16. Oktober 2006 um 22:25
    • #10
    Zitat von JohannesBuchner

    Swoncen: Ich nehme an, du meinst hier eine bestimmte IDE? welche?


    Eine beliebige IDE mit Code Completion :)

    Visual Studio, kdevelop, sogar vim....

    Dipper dipper dii dipper dii dipper dii duuu

  • master_fluc
    6
    master_fluc
    Mitglied
    Punkte
    345
    Beiträge
    57
    • 16. Oktober 2006 um 22:49
    • #11
    Zitat von sauzachn

    Wie kommst du auf die Idee?


    Weil bei guter OOP keine Funktion zweimal vorkommen wird, da sie in Klassen als Methoden gekapselt sind und eine Klasse auch nicht zweimal vorkommen sollte (was mach ich zB mit zwei Klassen namens Person? :winking_face: - eine Person ist eben eine Person)

    C++ ist allerdings keine objektorientierte Sprache und man kanns auch nie komplett objektorientiert programmieren, da man sonst "Funktionsrestklassen" definieren müsste, wie zB für die mathematische Funktionssammlung...

    das Objekt cin (als Instanz der Klasse istream) würde bei guter OOP auch niemals zweimal vorkommen, dadurch wird die Idee von Namespaces konterkariert (ich liebe dieses Wort :grinning_squinting_face: ), die ja gerade verhindern sollen, das der Compiler nicht weiß, welches Objekt / welche Funktion gemeint ist.

    Beispiel:

    C
    datei1.hpp:
    ...
    foo()
    ...
    
    
    datei2.hpp:
    ...
    foo()
    ...
    
    
    datei3.cpp:
    #include <datei2.hpp>
    #include <datei1.hpp>
    ...
    foo();
    ...
    Alles anzeigen

    Dem kann man mit Namespaces abhelfen, was aber nichts daran ändert, dass es bei guter Programmierung nicht vorkommen sollte.

    Better to reign in hell,
    than serve in heaven.
    (John Milton, Paradise Lost)

  • hal
    32
    hal
    Mitglied
    Reaktionen
    52
    Punkte
    11.122
    Beiträge
    2.208
    • 17. Oktober 2006 um 00:36
    • #12
    Zitat von Ivy

    okay ich bin ein fauler c-programmierer, deshalb schreib ich using namespace std. gg

    Das sind wohl viele, bis sie mal ein namespace-Konflikt beißt und sie eine Woche lang suchen, warum die Klasse nicht so funktioniert wie in der Dokumentation angegeben :)

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 17. Oktober 2006 um 01:11
    • #13
    Zitat von master_fluc

    Weil bei guter OOP keine Funktion zweimal vorkommen wird, da sie in Klassen als Methoden gekapselt sind und eine Klasse auch nicht zweimal vorkommen sollte (was mach ich zB mit zwei Klassen namens Person? :winking_face: - eine Person ist eben eine Person)


    Ich definier natürlich keine zwei Klassen, die jeweils Person heißen, aber man verwendet immer wieder Libraries. Wenn zwei Libraries gleiche Klassennamen deklarieren, hat man den Salat; Namespaces helfen da. (Und ja, Libraries verwenden oft eigene Präfixe für alle Symbole, die sie exportieren -- bingo, genau diese Präfixe kann man sich mit Namespaces theoretisch sparen bzw. hat mit dem Namespace halt eine andere Art Präfix.)

    Zitat

    C++ ist allerdings keine objektorientierte Sprache und man kanns auch nie komplett objektorientiert programmieren, da man sonst "Funktionsrestklassen" definieren müsste, wie zB für die mathematische Funktionssammlung...


    Bitte was? Magst du in Smalltalk demonstrieren, das so eine Funktionsrestklasse sein soll?

    *plantsch*

  • hal
    32
    hal
    Mitglied
    Reaktionen
    52
    Punkte
    11.122
    Beiträge
    2.208
    • 17. Oktober 2006 um 10:32
    • #14
    Zitat von master_fluc

    Weil bei guter OOP keine Funktion zweimal vorkommen wird, da sie in Klassen als Methoden gekapselt sind und eine Klasse auch nicht zweimal vorkommen sollte (was mach ich zB mit zwei Klassen namens Person? :winking_face: - eine Person ist eben eine Person)

    Ich hatte diese Situation in CG2 -- ein Model im Model Loader ist was anderes als ein Model in der Physik-Engine oder ein Model in der Graphik-Engine. Schlechtes OOP wäre gewesen, diese alle in eine Klasse zu stecken.

    Ohne namespaces hätte ich mit Prefixen anfangen müssen, die nichts anders als eine schlechte Implementation dieses Konzepts sind.

    Dass C++ keine echte objektorientierte Programmiersprache ist, da muss ich zustimmen, wenn auch nicht wegen denen von dir angegebenen Gründen.

    "I invented the term object oriented, and I can tell you that C++ wasn't what I had in mind." -- Alan Kay

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • hal
    32
    hal
    Mitglied
    Reaktionen
    52
    Punkte
    11.122
    Beiträge
    2.208
    • 17. Oktober 2006 um 10:38
    • #15
    Zitat von Plantschkuh!

    Bitte was? Magst du in Smalltalk demonstrieren, das [sic] so eine Funktionsrestklasse sein soll?

    http://www.google.com/search?q=Funktionsrestklassen ist sehr aufschlussreich :)

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • sauzachn
    17
    sauzachn
    Mitglied
    Reaktionen
    51
    Punkte
    3.101
    Beiträge
    606
    • 17. Oktober 2006 um 10:45
    • #16
    Zitat von master_fluc

    Weil bei guter OOP keine Funktion zweimal vorkommen wird, da sie in Klassen als Methoden gekapselt sind und eine Klasse auch nicht zweimal vorkommen sollte (was mach ich zB mit zwei Klassen namens Person? :winking_face: - eine Person ist eben eine Person)


    Natürlich hast du im Prinzip recht - man müsste nur jede Klasse/Funktion vollständig (und damit eindeutig) benennen. Aber dass das nicht funktioniert oder höchst unbequem sein kann, zeigt dir schon, dass es in praktisch jeder prozeduralen oder objektorientierten (aber auch funktionalen) Sprache ein Konstrukt "Modul" gibt (wie auch immer das konkret geartet ist), das mehrere Funktionen/Klassen zu einer Einheit zusammenfügt. Seien es Namespaces in C++, Packages in Java oder Ada, Cluster in Eiffel, Module in Haskell usw.

    In allen anderen Sprachen hilft man sich mit einem Präfix (was um einiges häßlicher ist als ein Namespace).

    Plantschkuh hat schon auf die Verwendung von fremdem Code hingewiesen, was in diesem Punkt auch eine große Rolle spielt.

    Zitat von master_fluc

    C++ ist allerdings keine objektorientierte Sprache und man kanns auch nie komplett objektorientiert programmieren, da man sonst "Funktionsrestklassen" definieren müsste, wie zB für die mathematische Funktionssammlung...


    Warum ist C++ keine oo Sprache?! Ich würde jetzt nicht behaupten, dass es eine besonders elegante oo Sprache wäre (das Gegenteil ist der Fall), aber sie weist die typischen Merkmale der OOP auf: Klassen, Vererbung, Generizität, ...

    Dass man nie komplett OO programmieren kann, trifft nur auf die main() Funktion zu. Aber schau mal in Java/C#: Das public static void main(String[] args) hat auch nicht viel mit OO zu tun.

    Eine Sprache, die es konsequent oo macht, ist Eiffel: Dort gibt es kein main oder so was, sondern du gibst im "Makefile" eine (beliebige) Klasse an, die der Startpunkt des Programms sein soll. Von dieser Klasse wird dann (automatisch) zu Programmstart eine Instanz erzeugt und ihr Konstruktor aufgerufen.

    Dipper dipper dii dipper dii dipper dii duuu

  • sauzachn
    17
    sauzachn
    Mitglied
    Reaktionen
    51
    Punkte
    3.101
    Beiträge
    606
    • 17. Oktober 2006 um 10:49
    • #17
    Zitat von hal

    Ich hatte diese Situation in CG2 -- ein Model im Model Loader ist was anderes als ein Model in der Physik-Engine oder ein Model in der Graphik-Engine. Schlechtes OOP wäre gewesen, diese alle in eine Klasse zu stecken.


    Eine Alternative wäre "PhysicalModel" und "GraphicalModel" gewesen. Die könnten sogar evt. von "Model" erben :)

    Aber das Problem ist, dass es dann unbequem und/oder unintuitiv wird: Entweder es artet in einen generellen Präfix "Physical" für alle zusammengehörigen Klassen aus oder du weißt nicht mehr, welche Klassen mit welchen zusammenspielen.

    Dipper dipper dii dipper dii dipper dii duuu

  • hal
    32
    hal
    Mitglied
    Reaktionen
    52
    Punkte
    11.122
    Beiträge
    2.208
    • 17. Oktober 2006 um 10:55
    • #18
    Zitat von sauzachn

    Warum ist C++ keine oo Sprache?! Ich würde jetzt nicht behaupten, dass es eine besonders elegante oo Sprache wäre (das Gegenteil ist der Fall), aber sie weist die typischen Merkmale der OOP auf: Klassen, Vererbung, Generizität, ...

    Allerdings kein message passing, und proxies sind auch eine Illusion.
    Generizität ist nichts anderes als ein Workaround für das Fehlen von object introspection (deswegen ist es in Java auch so deplaciert).

    Zitat

    Dass man nie komplett OO programmieren kann, trifft nur auf die main() Funktion zu. Aber schau mal in Java/C#: Das public static void main(String[] args) hat auch nicht viel mit OO zu tun.

    Eine Sprache, die es konsequent oo macht, ist Eiffel: Dort gibt es kein main oder so was, sondern du gibst im "Makefile" eine (beliebige) Klasse an, die der Startpunkt des Programms sein soll. Von dieser Klasse wird dann (automatisch) zu Programmstart eine Instanz erzeugt und ihr Konstruktor aufgerufen.

    Das unterscheidet sich aber nur minimal vom Java/C#-Ansatz. Diese beiden machen das höchstwahrscheinlich nur, damit sich C++-Programmierer nicht zu sehr umstellen müssen (die müssten ja noch was neues lernen, oh mein gott).

    Ein echter OOD-Ansatz wird in Cocoa verfolgt, wo keine Klasse an sich ein "Einstiegspunkt" ist, sondern du hast einfach verschiedene Klassen mit verschiedenen Zuständigkeiten. Dieses Konzept funktioniert halt nicht bei Kommandozeilenprogrammen.

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • hal
    32
    hal
    Mitglied
    Reaktionen
    52
    Punkte
    11.122
    Beiträge
    2.208
    • 17. Oktober 2006 um 11:01
    • #19
    Zitat von sauzachn

    Eine Alternative wäre "PhysicalModel" und "GraphicalModel" gewesen. Die könnten sogar evt. von "Model" erben :)

    Diesen Ansatz hab ich eh erwähnt in meinem Post? Das ist nichts anderes als ein Workaround für ein fehlendes Sprachfeature.

    Zitat

    Aber das Problem ist, dass es dann unbequem und/oder unintuitiv wird: Entweder es artet in einen generellen Präfix "Physical" für alle zusammengehörigen Klassen aus oder du weißt nicht mehr, welche Klassen mit welchen zusammenspielen.

    Und wo ist das Problem, wenn alles, was mit Physik zu tun hat, in seinem eigenen Physik-Namespace gekapselt ist? Genau so hab ichs gemacht.

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • sauzachn
    17
    sauzachn
    Mitglied
    Reaktionen
    51
    Punkte
    3.101
    Beiträge
    606
    • 17. Oktober 2006 um 11:11
    • #20
    Zitat von hal

    Allerdings kein message passing, und proxies sind auch eine Illusion.
    Generizität ist nichts anderes als ein Workaround für das Fehlen von object introspection (deswegen ist es in Java auch so deplaciert).


    Du willst also so was wie Smalltalk haben? Ja, das geht natürlich mit C++ nicht, weil es halt doch eine statische und keine dynamische OO Sprache ist.

    Dipper dipper dii dipper dii dipper dii duuu

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung