c++ objektorientiert - was soll das?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
The Torso
Beiträge: 882
Registriert: 13.07.2003 12:46:40
Lizenz eigener Beiträge: MIT Lizenz

c++ objektorientiert - was soll das?

Beitrag von The Torso » 22.04.2004 22:05:34

Die Frage vorweg, wie greif ich auf eine Variable/Funktion in der Klasse Cats zu (Funktionen müssten natürlich noch ergänzt werden)?

Als System benutz ich Debian Sarge und versuche gerade mein erstes objektorientiertes Programm mit C++ zu schreiben.
Da wir an der Uni java lernen, glaub ich auch nicht, dass ich davon überhaupt nichts verstehe.
Ich hab mich bereits ausführlich mit C und der nicht objektorientierten Sparte von C++ beschäftigt.
So, nun ist es aber so, dass folgender Code:

Code: Alles auswählen

#include <iostream>
using namespace std;

class Cat {
public: 
  int itsAge;
  int itsWeight;
};

int main()
{
  Cat Frisky;
  Frisky.itsAge = 5;
  cout << "Frisk ist eine Katze, die " Frisky.itsAge 
       << " Jahre alt ist." << endl;

  return 0;
}
folgenden Fehler bringt:
  • katze.cpp: In function `int main()':
    katze.cpp:14: error: parse error before `.' token
Hat also irgendetwas mit den zugriff auf itsAge zu tun.

Komisch find ich nur; ich hab das teil von [1] C++ in 21 Tagen. Es befindet sich auf [2] . Ok, ich habe gute erfahrungen mit C in 21 Tagen gemacht, da dacht ich mir das kann nicht so schlecht sein.
Auch wenn sie das using namespace std; "vergessen" hatten, und das wird es wohl brauchen, oder?

Ok, meine Frage, wie greif ich auf eine Variable/Funktion in der Klasse Cats zu (Funktionen müssten natürlich noch ergänzt werden)?

[1] http://www.fun-soft.de/Download/ebooks/ ... nhalt.html
[2] http://www.fun-soft.de/Download/ebooks/ ... html#76304
Debian GNU/Linux 00101010

Benutzeravatar
spiffi
Beiträge: 1128
Registriert: 09.08.2003 19:02:27

Beitrag von spiffi » 22.04.2004 22:16:37

Da fehlt der Shift-Operator vor Frisky.itsAge.

Code: Alles auswählen

int main()
{
  Cat Frisky;
  Frisky.itsAge = 5;
  cout << "Frisk ist eine Katze, die " << Frisky.itsAge
  //                                   ^^ 
       << " Jahre alt ist." << endl;

  return 0;
}
No language can express every thought unambiguously, least of all this one. -- D. R. Hofstadter

Benutzeravatar
The Torso
Beiträge: 882
Registriert: 13.07.2003 12:46:40
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von The Torso » 22.04.2004 22:19:57

Interessant, ok, aber was jetzt?
beim ausfuehren von gcc katze.cpp -o katze.out
  • /tmp/cc01YB0m.o(.text+0x22): In function `main':
    : undefined reference to `std::cout'
    /tmp/cc01YB0m.o(.text+0x27): In function `main':
    : undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
    /tmp/cc01YB0m.o(.text+0x38): In function `main':
    : undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(int)'
    /tmp/cc01YB0m.o(.text+0x48): In function `main':
    : undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
    /tmp/cc01YB0m.o(.text+0x50): In function `main':
    : undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
    /tmp/cc01YB0m.o(.text+0x58): In function `main':
    : undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
    /tmp/cc01YB0m.o(.text+0x81): In function `__static_initialization_and_destruction_0(int, int)':
    : undefined reference to `std::ios_base::Init::Init[in-charge]()'
    /tmp/cc01YB0m.o(.text+0xb2): In function `__tcf_0':
    : undefined reference to `std::ios_base::Init::~Init [in-charge]()'
    /tmp/cc01YB0m.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
    collect2: ld returned 1 exit statu
habs falsch abgetippt, geb ich zu, aber der Fehler ist echt heavy.
Debian GNU/Linux 00101010

Benutzeravatar
BeS
Moderator
Beiträge: 3236
Registriert: 17.04.2002 18:30:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von BeS » 22.04.2004 22:27:31

Hallo,
für C++ Programmen solltest du g++ anstelle von gcc verwenden.
Deine Unterstützung für Freie Software kostet dich nur wenige Minuten: www.fsfe.org/support

Ich spreche von Freier Software!

Benutzeravatar
The Torso
Beiträge: 882
Registriert: 13.07.2003 12:46:40
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von The Torso » 22.04.2004 22:33:46

Oh Gott, bitte lösch den Blödsinn, den ich da verzapft habe *gg* :roll:
Debian GNU/Linux 00101010

Benutzeravatar
Bert
Beiträge: 3751
Registriert: 16.07.2002 14:06:52
Wohnort: Dresden
Kontaktdaten:

Beitrag von Bert » 23.04.2004 08:55:11

Von diesen C(++) in 21 Tagen Büchern rate ich dringend ab. Das ist der größte Schrott. Kostenlos und besser sind z.b. die "Tinking in .." [1] von Bücher von Bruce Eckel.

[1] http://www.mindview.net/
Programmer: A biological machine designed to convert caffeine into code.
xmpp:bert@debianforum.de

Benutzeravatar
gOtNoPhEaR
Beiträge: 863
Registriert: 17.04.2004 15:49:29
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Gau-Algesheim
Kontaktdaten:

Beitrag von gOtNoPhEaR » 23.04.2004 10:14:27

Was ich empfehlen kann sind die "Dummy" Reihen.
C für Dummies und C++ für Dummies (so lernen sie das hohe C).
Lässt sich übrigens auch sehr gut lesen (ist was lustiger geschrieben.
Greetz, gOtNoPhEaR

OS: Debian/testing amd64

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Beitrag von peschmae » 24.04.2004 10:04:44

Ich halte auch recht viel von Bruce Eckel und auch vom Stroustrup - wobei ersterens Bücher recht lang und letzerens Buch "The C++ Programming Language" für den Anfang recht heavy ist.

MfG Peschmä

Antworten