Dziwny blad

0

Mam taki prosty fragment kodu:


```cpp
struct base {
	virtual void what() { cout<<"base\n"; }
};
struct derived_1: base {
	void what() { cout<<"derived_1\n"; }
};

struct derived_2: base {
	void what() { cout<<"derived_2\n"; }
};

struct generator {
	generator() { srand(static_cast<unsigned>(time(0))); }
	base* operator()() {
		int i=rand()%2;
		return i ? new derived_1 : new derived_2;
	}
};

Chodzi o obiekt funkcyjny generator - uzywany do wypelnienia wektora wskaznikow ""base*" - kompilacja wywala blad "no conversion from "derived_2*" to "derived_1*". O co chodzi? Jaka konwersja?
Środowisko - Visual Studio .NET 2003
0

Problem rozwiazany dzieki innemu kompilatorowi i jego komunikatowi:"operands must evaluate to the same type". Poprawny funktor wyglada tak:


```cpp
struct generator {
	generator() { srand(static_cast<unsigned>(time(0))); }
	base* operator()() {
		return rand()%2 ? static_cast<base*>(new derived_1) : static_cast<base*>(new derived_2);
	}
};

Swoja droga nigdzie o czyms takim nie slyszalem / czytalem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1