Seite 1 von 1

Merkwürdiges Verhalten

Verfasst: Mo Jun 27, 2011 8:18 pm
von cloidnerux
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?

Re: Merkwürdiges Verhalten

Verfasst: Mo Jun 27, 2011 8:41 pm
von Kerli
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.

Re: Merkwürdiges Verhalten

Verfasst: Mo Jun 27, 2011 8:43 pm
von cloidnerux
Fehler können so dämlich sein ;)
Danke für die Hilfe, es tut nun so wie es soll.