Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: stavros 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
#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;
}
-
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.
-
Ten kód funguje, ale soubor musí mít jednopísmenný název :). Název souboru se totiž ukládá jako znak.
-
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.
-
Díky všem za vysvětlení.
-
Tenhle kod je kontextove spatne.
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 :)