staggart
asked on
RTTI Question/Problem - trying to print class name
On MSC VC++ 5.0 (SP3), I am trying to print out the name of a
class from a class member function. In the first case
below, the compiler fatal errors. In the second case, I get
an obscure error. Any ideas on how to print a class' name
from withing the class like I am doing? Thanks.
-------------------------- ---------- ---------- ---
#include <iostream>
using namespace std;
#include <typeinfo>
//
// CBorder -- border of an object
//
class CBorder
{
public:
void PrintName() { cout << typeid(this).name << endl; };
};
Here's the error:
junk.cpp(13) : fatal error C1001: INTERNAL COMPILER ERROR
(compiler file 'msc1.cpp', line 1188)
Please choose the Technical Support command on the Visual C++
Help menu, or open the Technical Support help file for more information
-------------------------- ---------- ---------- ---
#include <iostream.h>
// using namespace std;
#include <typeinfo>
//
// CBorder -- border of an object
//
class CBorder
{
public:
void PrintName() { cout << typeid(this).name << endl; };
};
Here's the error:
junk.cpp(13) : error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'overloaded function type' (or there is no acceptable conversion)
class from a class member function. In the first case
below, the compiler fatal errors. In the second case, I get
an obscure error. Any ideas on how to print a class' name
from withing the class like I am doing? Thanks.
--------------------------
#include <iostream>
using namespace std;
#include <typeinfo>
//
// CBorder -- border of an object
//
class CBorder
{
public:
void PrintName() { cout << typeid(this).name << endl; };
};
Here's the error:
junk.cpp(13) : fatal error C1001: INTERNAL COMPILER ERROR
(compiler file 'msc1.cpp', line 1188)
Please choose the Technical Support command on the Visual C++
Help menu, or open the Technical Support help file for more information
--------------------------
#include <iostream.h>
// using namespace std;
#include <typeinfo>
//
// CBorder -- border of an object
//
class CBorder
{
public:
void PrintName() { cout << typeid(this).name << endl; };
};
Here's the error:
junk.cpp(13) : error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'overloaded function type' (or there is no acceptable conversion)
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Yes, you are so right. My mistake. I think the compiler should not get a fatal error!
both typeid(this).name() and typeid(*this).name() work.
Thanks.
both typeid(this).name() and typeid(*this).name() work.
Thanks.
>>I think the compiler should not get a fatal error!
Agreed, but at least this one was easy to fix. Sometimes it is a real pain. I've been helping someone else (actually, I haven't) on a fatal compiler error for several days now.
Agreed, but at least this one was easy to fix. Sometimes it is a real pain. I've been helping someone else (actually, I haven't) on a fatal compiler error for several days now.
void PrintName() { cout << typeid(*this).name() << endl; };