c++ - 结构成员字段是函数指针时出错

标签 c++ pointers

我需要让 struct member 成为常规函数指针(而不是类成员函数指针)。不知道为什么编译错误。我在 Ubuntu 14.04 上运行 g++ 4.8.4。谢谢。

$ g++ te5.cc
te5.cc: In function ‘int main(int, char**)’:
te5.cc:18:9: error: invalid use of member function (did you forget the ‘()’ ?)
  t.func = dum;
         ^
te5.cc:19:6: error: ‘func’ was not declared in this scope
  (t.*func)();

代码片段

#include <stdio.h>
#include <string>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef void pfpv(void *obj);
typedef struct {
    pfpv  func;
    void *obj;
} strTimer;

void dum(void* p) {
    printf("in dum()\n");
}

int main (int argc, char *argv[]) {
    strTimer t;
    t.func = dum;
    (t.*func)();
    return 0;
}

最佳答案

这可以通过使 pfpv 成为函数指针而不是函数来解决。

#include <stdio.h>
#include <string>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef void (*pfpv)(void *obj);

typedef struct {
    pfpv  func;
    void *obj;
} strTimer;

void dum(void* p) {
    printf("in dum()\n");
}

int main (int argc, char *argv[]) {
    strTimer t;
    t.func = dum;
    t.func(0);
    return 0;
}

关于c++ - 结构成员字段是函数指针时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41365086/

相关文章:

c - C中的*d++和(*d)++有什么区别?

c++ - 使用鼠标从视频上的矩形设置 ROI

c++ - 将字符串截断为长度 N 的有效方法

c++ - 十六进制字符到 std::string 的 constexpr 转换

c++ - 我怎样才能使 C++ 更喜欢匹配父类重载而不是模板?

c - .h 中的指针会自动设置为 NULL 吗?

c++ - 用于确定机器字节顺序的条件预处理器指令

c++ - 将对象转换为 std::unique_ptr

c - 如何释放函数外部 malloc() 使用的内存?

c - 在函数内设置指针值