(help) Runtime error in ifstream/ios class

M

Massimo Soricetti

Hello,

I'm trying to fix this little class:
<code>
#include <ifstream>
#include <iostream>
#include <iomanip>

using namespace std;

class iExeStream: ifstream
{
public:
int GetDOSheader(void);
DWORD GetDword(bool);
WORD GetWord(bool);
BYTE GetByte(void);
int readPascalString(char *);
};
</code>

I'm using BC++Builder 6.
It compiles correctly, but when I launch the program it dies with a
runtime error before even show the first program screen. I know ths
behaviour is sometime caused by faults in static objects ctors, who are
executed before the program starts, but no one of the iExeStream objects
I use is static.

With BCB6 debugger, after clicking OK on the error window it opens the
"ios.h" header file??? o_O
 
M

mlimber

Massimo said:
Hello,

I'm trying to fix this little class:
<code>
#include <ifstream>
#include <iostream>
#include <iomanip>

using namespace std;

class iExeStream: ifstream
{
public:
int GetDOSheader(void);
DWORD GetDword(bool);
WORD GetWord(bool);
BYTE GetByte(void);
int readPascalString(char *);
};
</code>

I'm using BC++Builder 6.
It compiles correctly, but when I launch the program it dies with a
runtime error before even show the first program screen. I know ths
behaviour is sometime caused by faults in static objects ctors, who are
executed before the program starts, but no one of the iExeStream objects
I use is static.

With BCB6 debugger, after clicking OK on the error window it opens the
"ios.h" header file??? o_O

There's nothing in the code you posted that seems like it would cause
such an error, but then again, you didn't post very much. Try to reduce
the problem to a minimal program that you could post here in its
entirety.

On the other hand, since classes default to private inheritance, your
deriving iExeStream from std::ifstream is probably poor design. Simple
composition would likely be better. See these FAQs:

http://www.parashift.com/c++-faq-lite/private-inheritance.html#faq-24.2
http://www.parashift.com/c++-faq-lite/private-inheritance.html#faq-24.3

Cheers! --M
 
M

Massimo Soricetti

mlimber ha scritto:
There's nothing in the code you posted that seems like it would cause
such an error, but then again, you didn't post very much. Try to reduce
the problem to a minimal program that you could post here in its
entirety.

On the other hand, since classes default to private inheritance, your
deriving iExeStream from std::ifstream is probably poor design. Simple
composition would likely be better. See these FAQs:

I added a public constructor and declared "public" the inheritance of
ifstream, now it works. The FAQ you mentioned are very interesting,
thank you... maybe I'm going to change something in my code, however.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,767
Messages
2,569,570
Members
45,045
Latest member
DRCM

Latest Threads

Top