| Title: | C++ |
| Notice: | Read 1.* and use keywords (e.g. SHOW KEY/FULL KIT_CXX_VAX_VMS) |
| Moderator: | DECCXX::AMARTIN |
| Created: | Fri Nov 06 1987 |
| Last Modified: | Thu Jun 05 1997 |
| Last Successful Update: | Fri Jun 06 1997 |
| Number of topics: | 3604 |
| Total number of notes: | 18242 |
Hello
I have a customer running OSF 3.2c and Digital C++ version 5.4-006
He states that the c++ compiler should be able to pick up the described
programming error using abstract classes.
I have tested it using visual c++ 4.1 on an alpha running NT and it does not
pick up the error either until runtime.
Should the compiler find the programming error?
Regards
Poul Erik Thomsen
Digital Denmark
-------------------------From the customer--------------------------
The DEC C++ compiler seems to have a bug, when dealing with abstract base
classes and classes derived hereof.
The small code example is compiled and linked by the Dec
C++ compiler without problems, whereas the GNU C++ compiler
gives an error message.
Code example
============-
#include <iostream.h>
// Abstract base class
class B
{
public:
virtual void Dump() = 0;
};
// Class derived from base class
// OK to instanciate as BD defines Dump() method
class BD : public B
{
public:
void Dump() { cout << "BD::Dump()" << endl; };
};
// Class containing instances of B
// Should give compiler error, as B is abstract
class BC
{
public:
B b[5];
};
main()
{
BD * pBD = new BD;
BC * pBC = new BC;
pBD->Dump(); // OK
pBC->b[0].Dump(); // Gives segmentation violation when run
}
Compile code example
---------------------------------------------------------
cxx -o x x.cxx
Run program (gives segmentation violation)
---------------------------------------------------------
x
BD::Dump()
Segmentation fault (core dumped)
Compile code example with GNU C++
---------------------------------------------------------
g++ -o x x.cxx
x.cxx:27: cannot declare field `BC::b' to be of type `B'
x.cxx:27: since the following virtual functions are abstract:
x.cxx:27: void B::Dump()
| T.R | Title | User | Personal Name | Date | Lines |
|---|---|---|---|---|---|
| 3413.1 | customer is right, it should give an error... | DECC::J_WARD | Tue Jan 28 1997 09:23 | 12 | |
When version 6.0 of the DEC C++ compiler is released,
the following error will be given:
"t.cxx", line 26: error: array of abstract class is not allowed
B b[5];
^
1 error detected in the compilation of "t.cxx".
cxx currently only gives an error if b is not an array type ... this
is a bug.
| |||||