【问题标题】:VC++ Function Pointers in Class类中的 VC++ 函数指针
【发布时间】:2013-07-23 01:01:01
【问题描述】:

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;

“错误 C2440: 'initializing' : 无法从 'Point3 (__cdecl LASReader::* )(void)' 转换为 'Point3'”

当我使用手镯时

Point3 p = reader->GetPoint();

“错误 C2064:术语不计算为采用 0 个参数的函数”

我做错了什么?

【问题讨论】:

    标签: c++ class visual-c++ function-pointers


    【解决方案1】:

    您需要使用(reader->*reader->GetPoint)() 来调用它。见How to invoke pointer to member function when it's a class data member?

    【讨论】:

    • 好的,我明白了,但现在我遇到了一个“_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)”问题,试图多次删除 Point3
    • 您发布的代码中没有任何内容甚至包含Point3 指针。
    • 不,问题还在继续。为什么 Point3 超出范围?
    • GetPointF() 函数如下: Point3 GetPointF0() { Vector3 position = Vector3(pointData.X, pointData.Y, pointData.Z);位置 = 位置 * m_scale + *m_offset;返回Point3(位置); } Point3 的位置为 Vector3,这里是 ctor: Point3::Point3(Vector3 position) { m_position = new Vector3(position.X, position.Y, position.Z); }
    • 很可能,这是三件事的规则。您需要一个复制构造函数和赋值运算符。
    【解决方案2】:

    函数指针语法如下

    returnType (*yourFuncName)(argumentTypes);
    

    所以你需要将你的成员重新定义为这样的东西

    Point3 (*getPointFunc)(void);
    

    【讨论】:

    • 在VC++中好像是非法的。类成员中的函数指针必须像我一样定义,否则会导致编译器错误 C2276
    • 奇怪,我真的做到了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-19
    • 2011-09-03
    • 2015-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    相关资源
    最近更新 更多