VC++ Function Pointers in Class

LASReader.h

class LASReader
{

public:

LASReader();
~LASReader();

Point3 (LASReader::*GetPoint)();

private:

Point3 GetPointF0();
Point3 GetPointF1();
Point3 GetPointF2();
Point3 GetPointF3();
Point3 GetPointF4();
Point3 GetPointF5();
};

LASReader.cpp

switch (m_header.PointDataFormat)
{
case 0:
    m_formatSize = sizeof(LASPOINTF0);
    GetPoint = &LASReader::GetPointF0;
    break;
case 1:
    m_formatSize = sizeof(LASPOINTF1);
    GetPoint = &LASReader::GetPointF1;
    break;
case 2:
    m_formatSize = sizeof(LASPOINTF2);
    GetPoint = &LASReader::GetPointF2;
    break;
case 3:
    m_formatSize = sizeof(LASPOINTF3);
    GetPoint = &LASReader::GetPointF3;
    break;
case 4:
    m_formatSize = sizeof(LASPOINTF4);
    GetPoint = &LASReader::GetPointF4;
    break;
case 5:
    m_formatSize = sizeof(LASPOINTF5);
    GetPoint = &LASReader::GetPointF5;
    break;
default:
    break;  // Unknown Point Data Format
}

main.cpp

Point3 p = reader->GetPoint;

"Error C2440: 'initializing' : cannot convert from 'Point3 (__cdecl LASReader::* )(void)' to 'Point3'"

When I use bracelets

Point3 p = reader->GetPoint();

"Error C2064: term does not evaluate to a function taking 0 arguments"

What am I doing wrong?

Upvotes: 1

Views: 187

Answers (2)

Joel
Joel

Reputation: 1145

You need to use (reader->*reader->GetPoint)() to call it. See How to invoke pointer to member function when it's a class data member?

Upvotes: 2

mewa
mewa

Reputation: 1552

Function pointer syntax goes as follows

returnType (*yourFuncName)(argumentTypes);

so you'll need to redefine your member to something like this

Point3 (*getPointFunc)(void);

Upvotes: -1

Related Questions