C++11: Jak vypsat enum class ModOdpovedi: unsigned char uložeho ve struktuře – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

C++11: Jak vypsat enum class ModOdpovedi: unsigned char uložeho ve struktuře – C / C++ – Fórum – Programujte.comC++11: Jak vypsat enum class ModOdpovedi: unsigned char uložeho ve struktuře – C / C++ – Fórum – Programujte.com

 

wiew
~ Anonymní uživatel
2 příspěvky
13. 5. 2016   #1
-
0
-

Ahoj, hledal jsem na netu a nenalezl jsem funkční řešení pro můj problém. V c++ jsem nováček. Jedná se mi že mám ve struktuře uložená data (několik int a pak jeden enum). Zapsat do struktury data do enum není problém. Jak ale data vyčíst?

Pokud dám nodmálně v metodě main

zápis:

Target cil;
    cil.mod_ = ModOdpovedi::modA;

výpis

cout << "Mod Odpovedi:" << Message.mod_<< endl;

pokud chci vypsat tak vyběhne chyba: Cannot bind ‘std::basic_ostream<char>’ lvalue to ‘std::basic_ostream<char>&&’   

enum class ModOdpovedi: unsigned char
{
  modA  = 0x00,
  modB = 0x01
};

struct Target
{
  ModOdpovedi mod_; 
};

Na netu jsem našel možnost použití  

std::ostream &operator<<(std::ostream &os, Target const &cil)
{
	return os<<cil.mod_;
}

ale stále to ukazuje stejnou chybu

Nějaké nápady co s tím udělat abych mohl vypsat ze struktury že je v tom např. modA, nebo aby to klidně vypsalo char hodnotu 0x00 apod.

Díky moc za pomoc a radu

Nahlásit jako SPAM
IP: 195.113.129.–
BDS+3
Věrný člen
14. 5. 2016   #2
-
0
-

#1 wiew  

#include <iostream>
using namespace std;

enum class ModOdpovedi: unsigned char
{
  modA  = 0x00,
  modB = 0x01
};

struct Target
{
  ModOdpovedi moa; 
  ModOdpovedi mob;
};

ostream& operator<<(ostream& os, ModOdpovedi mo)
{
    return os << static_cast<int>(mo);
}

int main()
{
  Target target;
  
  target.moa = ModOdpovedi::modA;
  target.mob = ModOdpovedi::modB; 
  
  cout << "Mod Odpovedi A: " << target.moa << endl;
  cout << "Mod Odpovedi B: " << target.mob << endl;
}

pak si to uprav podle svých představ, trochu jsem to změnil ať je lépe vidět co to dělá..

Nahlásit jako SPAM
IP: 185.69.69.–
W11 :)
wiew
~ Anonymní uživatel
2 příspěvky
14. 5. 2016   #3
-
0
-

#2 BDS
Super! díky moc za pomoc. Ozkoušel jsem a už to jede jak má.

Nahlásit jako SPAM
IP: 82.100.10.–
BDS+3
Věrný člen
15. 5. 2016   #4
-
0
-

#3 wiew
nz, mimochodem ono by to mělo fungovat i takto: 

struct Target
{
	ModOdpovedi mod;
};

ostream& operator<<(ostream& os, Target t)
{
	return os << (unsigned)(t.mod);
}

int main()
{
	Target target1, target2;

	target1.mod = ModOdpovedi::modA;
	target2.mod = ModOdpovedi::modB;

	cout << "Odpoved 1: " << target1 << endl;
	cout << "Odpoved 2: " << target2 << endl;
	return 0;
}

každopádně přetypováním přes static_cast je to myslím správně

Nahlásit jako SPAM
IP: 185.69.69.–
W11 :)
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 63 hostů

Podobná vlákna

C++0X - enum class — založil Jan Kubalek

Unsigned char — založil oxidián

Base64 bez unsigned char — založil etrix

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý