Problém s cin objektu tridy – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problém s cin objektu tridy – C / C++ – Fórum – Programujte.comProblém s cin objektu tridy – C / C++ – Fórum – Programujte.com

 

Oromis0
Duch
30. 11. 2012   #1
-
0
-

gahoj
, mám úkol do školy, kde mám ve tříde TClass privátní proměnnou char *iValue. Mám přetížit operátor >> ( v mainu pro cin>> (objekt tridy) - to by mělo přiřadit řetězec do iValue pomocí metody SetValue()

class TClass
		{
		private:
			const char *iValue; 
			.
			.
			.
void SetValue(const char *aValue)
			{
			iValue = aValue;			
			}
			.
			.
			.
friend std::ostream& operator<<(std::ostream& aOStream, const TClass &adata)
   {aOStream << adata.iValue ; return aOStream;}

friend std::istream& operator>>(std::istream& aIStream, TClass& adata)
			{
		char *buff;
		buff = new char;
		aIStream.width(50+1);   //tady jsem zkoušel snad všechno a furt nic
		aIStream >> &buff[0];
		adata.SetValue(buff);					
		free(buff);
		return aIStream;
			}
                        



 
main.cpp:  
.
.
.
TClass a;

cin>>a;
cout<<a;

cout<<a; -> vypisuje nějaký náhodný znaky, ale když dám např.: TClass b("ahoj"); cout<<b; tak to vypíše bez problémů "ahoj"

...už mi z toho hrabe :-), věděl by někdo, co tam je špatně?

Nahlásit jako SPAM
IP: 2001:67c:1220:c1b1:6df7:1...–
liborb
~ Redaktor
+18
Guru
30. 11. 2012   #2
-
0
-

Problém je v tom, že iValue je jenom pointer. A když to nastavuješ, tak si jenom uložíš pointer do alokované paměti (buff), kterou vzápětí uvolníš. Asi nejlepší by bylo mít ve funkci SetValue alokaci (pokud není stávající velikost dostatečná) a kopírování řetězce.

Nahlásit jako SPAM
IP: 188.75.135.–
KIIV
~ Moderátor
+43
God of flame
30. 11. 2012   #3
-
+1
-
Zajímavé

krom toho alokuje jeden znak .. ne retezec znaku..

a co je jeste horsi mixuje   new a free ...

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
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, 86 hostů

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ý