C++ Einstiegsprogramm(C2352)

Gast #3202691
Lesenswert?

Hallo,

Ich habe ein Problem mit meinem C++ Einstiegsprogramm, es sollte ein 
Einführungsbeispiel für Polymorphie sein, gibt mir aber den Fehler:
(die Fehler):
Fehler  1  error C2352: 'CInstrument::Spielen': Unzulässiger Aufruf 
einer nicht statischen Memberfunktion  c:\users\markus\documents\visual 
studio 2008\projects\polymorphie\main.cpp  11
Fehler  3  error C2352: 'CInstrument::Stimmen': Unzulässiger Aufruf 
einer nicht statischen Memberfunktion  c:\users\markus\documents\visual 
studio 2008\projects\polymorphie\main.cpp  14
Fehler  2  error C2352: 'CSchlagzeug::Spielen': Unzulässiger Aufruf 
einer nicht statischen Memberfunktion  c:\users\markus\documents\visual 
studio 2008\projects\polymorphie\main.cpp  12

main.cpp
1
#include <conio.h>
2
#include <stdio.h>
3
#include "polymorphie.h"
4

5
#pragma warning(disable:4996)
6

7
void main()
8
{
9
  CSchlagzeug o;
10

11
  CInstrument::Spielen(1);
12
  CSchlagzeug::Spielen(2);
13
  
14
  CInstrument::Stimmen(o);
15
  getch();
16
}

polymorphie.h
1
#pragma once
2

3
class CInstrument
4
{
5
public:
6
  void Spielen(int note);
7
  void Stimmen(CInstrument& Instrument);
8

9
};
10

11
class CSchlagzeug : public CInstrument
12
{
13
public:
14
  void Spielen(int note);
15
};

polymorphie.cpp
1
#include <conio.h>
2
#include <stdio.h>
3
#include "polymorphie.h"
4

5
void CInstrument::Spielen(int note)
6
{
7
  printf("Instrument speilt %d\n", note);
8
}
9

10
void CSchlagzeug::Spielen(int note)
11
{
12
  printf("Schlagzeug spielt %d\n", note);
13
}
14

15
void CInstrument::Stimmen(CInstrument& Instrument)
16
{
17
  Instrument.Spielen(3);
18
}

hab schon mein Skriptum durch und C++ von A bis Z überfolgen(für mehr 
hab ich leider keine Zeit mehr) und leider keine Antwort für diese 
Fehler bekommen :/ Hab da morgen leider einer sehr sehr wichtige Prüfung 
drüber.

Hoffe mir kann da noch einer Helfen :)

lg
#3202705
Lesenswert?

pspracers schrieb:

> void main()
> {
>   CSchlagzeug o;
>
>   CInstrument::Spielen(1);
>   CSchlagzeug::Spielen(2);

du kannst die Funktion nicht so aufrufen.
Das ist eine Member Funktion eines Objektes. Du brauchst also ein Objekt 
um darauf die Funktion aufzurufen.

    o.Spielen(1);

Aber: Das ist nicht anders als bei anderen Funktionsaufrufen. Bist du 
sicher, dass du soweit bist, dich an das Konzept der Polymorphie zu 
wagen?
Denn dazu brauchst du dann ein paar Zutaten mehr - namentlich Referenzen 
oder Pointer und vor allen Dingen das Schlüsselwort volatile.
Gast #3202716
Lesenswert?

schonmal danke für die Antworten :)

ob ich dazu schon bereit bin, ist ja nicht meine Entscheidung :/ das 
machen sich ja die Lehrer aus, bzw. die machens wie es im Lehrplan steht 
:/
Hab jetzt das 3. Schuljahr reines C durch, nur sobald da OOP 
dazukommt(seit diesem Schuljahr) komm ich nicht mehr ganz klar damit :/
#3202799
Lesenswert?

Markus M. schrieb:
> @Karl Heinz Buchegger
>> … und vor allen Dingen das Schlüsselwort volatile.
> Ich bin neugierig und würde gerne deine Erklärung zu dieser Aussage
> lesen.

:-)
Du hast recht. Ich bin schon zu lange bei den µC :-)
Ich meinte natürlich virtual und nicht volatile.
(Fängt auch mit v an)

Also 2 Dinge braucht der Mann
* Pointer oder Referenzen
* virtuelle Funktionen

Dann klappts auch mit der Polymorphie.
#3202815
Lesenswert?

Markus M. schrieb:
> Puuuuh,
>
> da bin ich aber ruhigt. Ich hatte Skrupel, dich als ausgewiesenen
> Fachmann, der Falschaussage zu bezichtigen.

Passt schon. Wenn ich Blödsinn tippe, dann sags ruhig. Wenn ich dir 
zustimme, dann bedanke ich mich im Regelfall für die Korrektur.

(Und in dem Fall war das ja wirklich Unsinn. War zwar ein Versehen, aber 
Unsinn bleibt Unsinn)
#3202874
Lesenswert?

pspracers schrieb:
> Karl Heinz Buchegger schrieb:
>> Also 2 Dinge braucht der Mann
>> * virtuelle Funktionen
>
> Dankeschön, jetzt kenn ich mich auch aus, was mit dem Text gemeint war
> ;)
> Hab mir jetzt noch ein paar Übungsaufgaben gestellt, und sollte jetzt
> für den Test morgen bestens gerüstet sein :)


Zeig mal.

Denn mit dem Beispiel da oben (nachdem die Syntaxfehler korrigiert 
wurden), kriegst du zwar das erwartete Ergebnis. Aber der Grund dafür 
ist nicht Polymorphie.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren