【问题标题】:C++: cannot call member function without objectC++:不能调用没有对象的成员函数
【发布时间】:2014-06-15 03:02:21
【问题描述】:

我有一个名为 MessageQueue 的类,有 2 个方法(一个模板,一个普通),签名不同,但名称相同。所有的方法都是静态的

在我的班级 MessageQueue (MessageQueue.h) 中:

template <class T> void MessageQueue::sendMessage(const ___handle queue,
                                              const MESSAGE_ACTION &action,
                                              const T *pMessage)
{
    sendMessage(queue, action, (void*)pMessage, sizeof(pMessage));
}

在 MessageQueue.cpp 中:

void MessageQueue::sendMessage(const ___handle queue, const MESSAGE_ACTION &action,
                           const void *pMessage, const ___uint16 &size)
{
  // ...
}

我在这一行有一个编译错误:

sendMessage(queue, action, (void*)pMessage, sizeof(pMessage));

错误是:

错误:无法在没有对象的情况下调用成员函数 'void MessageQueue::sendMessage(void*, const MESSAGE_ACTION&, const void*, const ___uint16&)'

【问题讨论】:

  • 那条线在哪里?很可能您必须指定范围。 MessageQueue::sendMessage(...)
  • sizeof(pMessage) 将始终为 4 或 8,具体取决于您的系统。你确定这就是你想要的吗?
  • @tgmath: static 写在类定义中的成员函数旁边,而不是函数定义中。但我敢打赌,有一个static 不见了。
  • 我发现了我的错误:我没有用这样的静态类型定义方法 sendMessage:static void sendMessage(const ___handle queue, const MESSAGE_ACTION &action, const void *pMessage , const ___uint16 &size);
  • 哦,我明白了,这是 MessageQueue.h 中的行。

标签: c++ templates static


【解决方案1】:

sendMessage 的调用貌似是静态访问,但是方法不是声明为静态的。该方法应该声明为静态的,或者需要一个 ``MessageQueue 的实例;有关静态成员函数的说明,请参阅 here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多