Merkwürdiges Verhalten

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Merkwürdiges Verhalten

Beitrag von cloidnerux » Mo Jun 27, 2011 8:18 pm

Bei diesem Code hier:

Code: Alles auswählen

#include <iostream>

using namespace std;

#include "heterachie.h"

class base
{
protected:
	int a;
public:
	base(){a=1;}
	void printA(){cout << a << endl;};
	virtual void print(){cout << a << endl;}
};

class foo : public base
{
protected:
	int b;
public:
	foo(){b = 2;}
	void printB(){cout << b << endl;}
	void print(){cout << b << endl;}
	void add(){cout << a + b << endl;}
};

class bar : public base
{
private:
	int c;
public:
	bar(){c = 3;}
	void printC(){cout << c << endl;}
	void print(){cout << c << endl;}
	void add(){cout << c << endl;}
};

class FooBar : public foo, public bar
{
private:
	int d;
public:
	FooBar(){d=4;};
	void print(){cout << d << endl;};
};

void TestFunc()
{
	FooBar myFoo();
	foo fo();
	bar ba();
	myFoo.print(); //Fehler: Links von ".print" muss sich eine Klasse/Struktur/Union befinden.
	fo.print(); // Ebenfalls
	ba.print(); //Selber fehler
}
Meckert mein Compiler(MSVC 2008 Professional) bei den letzten Zeilen rum.
Aber ich kann mir das nicht erklären?
Die Objektinitialisierung nimmt er an und damit müsste doch myFoo.print() das gewünschte Ergebnis bringen?
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Merkwürdiges Verhalten

Beitrag von Kerli » Mo Jun 27, 2011 8:41 pm

cloidnerux hat geschrieben:FooBar myFoo();
Das ist eine Vorwärts-Deklaration für eine Funktion myFoo ohne Parameter und dem Rückgabewert FooBar. Lass die Klammern weg, dann passt es.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Merkwürdiges Verhalten

Beitrag von cloidnerux » Mo Jun 27, 2011 8:43 pm

Fehler können so dämlich sein ;)
Danke für die Hilfe, es tut nun so wie es soll.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Antworten