Kde je chyba? (C++)

stavros

Kde je chyba? (C++)
« kdy: 07. 10. 2013, 20:32:39 »
Ahoj, byl bych vděčný za pomoc, při nalezení chyby. Učím se třídy a chtěl bych, aby to zobrazilo text ze souboru. Nenačítá to ale nic. Díky za pomoc.
 

 GNU nano 2.2.6                             Soubor: main.cpp                                                               

Kód: [Vybrat]
#include<iostream>
#include<fstream>
using namespace std;
class Stream
{
public:
Stream(char);
~Stream();
char VypisObsahSouboru()const;
private:
char *na;
};
Stream::Stream(char ininazev)
{
na=new char;
*na=ininazev;
}
Stream::~Stream()
{
delete na;
}
char Stream::VypisObsahSouboru()const
{

ifstream fin(na);
char znak;
while (fin.get(znak))
cout<<znak;
fin.close();
return 0;
}
int main ()
{
char a;
cout<<"Nazev souboru\n";
cin>>a;
Stream MStream(a);
cout<<MStream.VypisObsahSouboru();
return 0;
}
« Poslední změna: 07. 10. 2013, 22:56:09 od Petr Krčmář »


m

Re:Kde je chyba?(C++)
« Odpověď #1 kdy: 07. 10. 2013, 21:02:44 »
http://en.wikipedia.org/wiki/C_data_types

char: smallest addressable unit of the machine that can contain basic character set. It is an integer type. Actual type can be either signed or unsigned depending on the implementation.

kolemjdoucí

Re:Kde je chyba?(C++)
« Odpověď #2 kdy: 07. 10. 2013, 21:09:51 »
Ten kód funguje, ale soubor musí mít jednopísmenný název :). Název souboru se totiž ukládá jako znak.

postula

Re:Kde je chyba?(C++)
« Odpověď #3 kdy: 07. 10. 2013, 21:26:26 »
Pozor, kód fungovat pro jednopísmenné názvy nutně nemusí, autor alokuje char do něhož načte jeden znak ve vstupu, ale konstruktoru ifstreamu ten char* předává ve významu stringu! Takže pokud za oním charem nebude v paměti následovat '\0', přečte si konstruktor nějaké nesmysly za tím.

Jinak pro autora je chyba opravdu v tom jednom znaku, pro uložení názvu v C++ doporučuji std::string.

stavros

Re:Kde je chyba?(C++)
« Odpověď #4 kdy: 07. 10. 2013, 21:44:13 »
Díky všem za vysvětlení.


rob

Re:Kde je chyba? (C++)
« Odpověď #5 kdy: 08. 10. 2013, 10:10:10 »
Tenhle kod je kontextove spatne.
Kód: [Vybrat]
Stream::~Stream()
{
delete na;
}
Nikde nevidim dynamickou alokaci.

Dale taky ignorujete zapouzreni.

I kdyby jste alokoval v mainu char a na heapu, tak to uvolnovat z v instanci MStream si zakladate na poradnej prusvih.

Pokud si hrajete se streamy a zakl. datovy typy, dejte si pozor na char * a <<, chova se to nestandardne :)