Problem/ciekawostka z typem enum

0

Mam taki oto enum:

enum config_flags {
	setx = 1,
	sety = 2,
	newl = 4
};

i chcialbym w uzyc czegos takiego setx | sety, jednak kompilator nie pozwala na takie cos...

class manipxy {
public:
	manipxy(int _x, int _y, config_flags _flag) {
		x = new int(_x);
		y = new int(_y);
		flag = new config_flags(_flag);
	}
	
	~manipxy() {
		delete x;
		delete y;
		delete flag;
	}
	
	int				*x, *y;
	config_flags	*flag;
};
.
.
.
manipxy set_xy(int _x, int _y) {
	manipxy m(_x, _y, (setx | sety));
	return m;
}

Kompilator wyrzuca blad o nielegalnej kowersji z 'int' na 'config_flags' w tym miejscu: manipxy m(_x, _y, (setx | sety)). Jak to naprawic... :-|

0

Z dokumentacji Borland'a:

```cpp enum e { flag1 = 0x01, flag2 = 0x02 };

void p(e);

void f()
{
p(flag1|flag2);

}


To make the example compile, the expression flag1|flag2 <b>must be cast to the enum type</b>: e (flag1|flag2).</i>
0

A jak rozwiazano to w bibliotece standardowej ? Bo np. przy zapisie fstream p("plik.txt", ios::in|ios::out); nie potrzeba jawnego rzutowania na typ enum.

0
DzieX napisał(a)

A jak rozwiazano to w bibliotece standardowej ? Bo np. przy zapisie fstream p("plik.txt", ios::in|ios::out); nie potrzeba jawnego rzutowania na typ enum.

Sprawa prosta.

ios_base::openmode=ios::in|ios::out

a

openmode

to nic innego jak:

typedef int openmode;
0

Dzieki o to chodzilo, bardzo mi pomogles :)

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