Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

29.01.2008, 11:48

Zugriff auf Methode in Klasse

Hallo ersteinmal

bin neu hier,habe auch gleich ein Problem, ich experementiere grade mit Klassen um das alles ersteinmal zu verstehen.
So ich habe eine Klasse erstellt die "Auto" heisst nun möchte ich mit dem getter auf Informationen in dieser Klasse zugreifen, bei der geschwindigkeit klappt das auch, bloss bei der get_Farbe funktioniert es einfach nicht.

Da meine C++ skills noch auf Level1 stehen komm ich hier einfach nicht weiter.
Als Fehlermeldung gibt mir der Compiler dies aus

Quellcode

1
2
test.cpp(61) : error C2679: Binärer Operator '<<': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'std::string' akzeptiert (oder keine geeignete Konvertierung möglich)
 



Hier noch der Source

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <iostream>
#include <windows.h>

using namespace std;



//***************************
// Auto Klasse***************
//***************************
class Auto
{
    string Farbe;
    int geschwindigkeit;
public:
    int get_geschwindigkeit();
    string get_Farbe();
    Auto();
    ~Auto();
};


//*************************
// Konstruktor ************
//*************************
Auto::Auto()
{
    geschwindigkeit = 200;
    Farbe = "rot";
    cout << "Auto wurde gebaut." << endl;
}


//**************************
//Destruktor ***************
//**************************
Auto::~Auto() 
{
    cout << "Auto wurde zerstoert." << endl;
}


//**************************
// Getter ******************
//**************************
int Auto::get_geschwindigkeit()
{
    return geschwindigkeit;
}

string Auto::get_Farbe()
{
    return Farbe;
}


//***************************************************************************************************
int main(){

    Auto bmw;
    cout << "Farbe: " << bmw.get_Farbe() << endl;
    cout << "Und eine Höchstgeschwindigkeit von " << bmw.get_geschwindigkeit() << endl;
    bmw.~Auto();
    system("PAUSE");
}



Muss ich einen anderen Datentyp nehmen als string ???

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

29.01.2008, 11:50

Versuch mal:

C-/C++-Quelltext

1
#include <string>
@D13_Dreinig

3

29.01.2008, 11:55

ahhhh besten dank !
Ich hab gedacht das wäre schon im iostream mit drinne.

4

29.01.2008, 15:52

Getter sind const, da sie nichts an der Klasse verändern sollen!

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#if !defined(CAR_HPP__INCLUDED)
#define CAR_HPP__INCLUDED

#if (_MSC_VER >= 1300)
#pragma once
#endif // (_MSC_VER >= 1300)


#include <string>

class Car
{
    std::string m_colour;
    unsigned int m_speed;

public:
    Car()
        : m_colour("red"), m_speed(230)
    {}

public:
    unsigned int get_speed() const { return m_speed; }
    std::string const& get_colour() const { return m_colour; }
};

#endif // CAR_HPP__INCLUDED

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
#include "car.hpp"
#include <iostream>

int main()
{
    Car car_bmw;
    std::cout << "Farbe: " << car_bmw.get_colour()
                  << "Höchstgeschwindigkeit: " << car_bmw.get_speed() << std::endl;
    std::cin.get();
}
. Warum rufst du den Destruktor von Hand auf? std::system("pause"); is bad! Und für die Klasse "Car" kannst du auch den operator<< überladen, dann kannst du direkt std::cout << car_bmw << std::endl; schreiben!
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

$nooc

Alter Hase

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

5

29.01.2008, 16:47

das soll jetzt nicht böse gemeint sein, aber er hat ja angemerkt dass er hier noch neu ist, und anscheinend auch erst angefangen hat c++ zu programmieren, da werden ihn zeilen wie

C-/C++-Quelltext

1
2
3
#if (_MSC_VER >= 1300)
#pragma once
#endif // (_MSC_VER >= 1300)


vielleicht noch verwirren (wusste bis vor kurzem auch nicht was sie bewirken)..

und anstatt zu fragen:

Zitat von »"Deviloper"«


Warum rufst du den Destruktor von Hand auf?


könnte man ihm ja einfach erklären, dass das objekt den destructor automatisch aufruft sobald es den gultigkeitsbereich verlässt (evtl. könnte man dann noch anführen dass eine variable die in einer funktion deklariert wurde nach der schließenden klammer '}' ihre gültigkeit verliert. auch genannt scope)

Zitat von »"Deviloper"«


std::system("pause"); is bad!


hab ich auch schon oft gehört, aber warum genau weiss ich eigentlich auch nicht ^^


Zitat von »"Deviloper"«


Und für die Klasse "Car" kannst du auch den operator<< überladen


ob er operatoren schon überladen kann?



dass soll jetzt nicht beleidigend sein (ich sag das lieber, da etwas gelesenes manchmal falsch rüber kommt), aber hier im forum werden die fragen nicht immer so anfänger-gerecht beantwortet :D

--> damit will ich nat. auch nicht sagen dass ich das evtl. besser kann.. bin ja selber irgendwie noch ein anfänger.. das ist mehr als tipp gemeint die fragen etwas anders zu beantworten ^^
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

6

29.01.2008, 16:57

Da ist schon was wahres dran @$nooc. Deviloper fährt schon immer mächtige Geschütze auf :shock:
Apropos Deviloper, warum verwendest du nie (zumindest habe ich es noch nicht bei dir gesehen) "using namespace std" und schreibst immer std::xyz?

7

29.01.2008, 22:00

Weil es meiner Ansicht nach den Sinn von Namensräumen untergräbt. Sicherlich kann man es lokal in einer Funktion nutzen. Aber höchstens dort und dann finde ich kann man es auch direkt lassen. In einem Header hat es aber auf jedenfall schonmal garnichts zu suchen!

Zitat von »"$nooc"«

Zitat von »"Deviloper"«

std::system("pause"); is bad!

Das habe ich auch schon oft gehört, aber warum genau das so ist, weiss ich eigentlich auch nicht! ^^

Naja also im Prinzip gibt es dafür google.de(um dir die Frage zu beantworten). Aber stell dir jetzt bsw. mal vor es ist etwas anderes als das was du erwartest als pause registriert ... was passiert dann?

http://www.c-plusplus.de/forum/viewtopic-var-t-is-39453.html sollte reichen. Such sonst einfach selbst nochmal ;)
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

SirForce

Alter Hase

Beiträge: 802

Wohnort: Süddeutschland

  • Private Nachricht senden

8

29.01.2008, 22:13

Zitat von »"Deviloper"«

std::system("pause"); is bad!


Die Erklärung beim Link leuchtet ein, aber was würdest du denn benutzen wenn du z.B. mit dem Dev-C++ Compiler arbeitest, da brauchst man (meines Wissens nach) nämlich system("PAUSE"); bevor du return 0; in der main-Funktion angibst, sonst passier wirklich das, was du angibst^^
Nichts behindert so sehr die Entwicklung der Intelligenz wie ihre vollständige Abwesenheit.

Michail Genin

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

9

29.01.2008, 22:15

Von "brauchen" kann nicht die Rede sein.
Das kriegt man auch anders hin (getch() z.B.).

SirForce

Alter Hase

Beiträge: 802

Wohnort: Süddeutschland

  • Private Nachricht senden

10

29.01.2008, 22:17

Zitat von »"David Scherfgen"«

Von "brauchen" kann nicht die Rede sein.
Das kriegt man auch anders hin (getch() z.B.).


Ok, jetzt weis ich es besser :D Danke!!!
Nichts behindert so sehr die Entwicklung der Intelligenz wie ihre vollständige Abwesenheit.

Michail Genin

Werbeanzeige