C++:不能调用没有对象的成员函数

标签 c++ templates static

我有一个名为 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));

错误是:

error: cannot call member function 'void MessageQueue::sendMessage(void*, const MESSAGE_ACTION&, const void*, const ___uint16&)' without object

最佳答案

sendMessage 的调用似乎是静态访问,但该方法并未声明为静态。方法应该声明为静态的,或者需要一个 MessageQueue 的实例;见here用于解释静态成员函数。

关于C++:不能调用没有对象的成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23360183/

相关文章:

c++ - 我可以根据其 operator() 的签名专门化可变参数模板参数吗

java - 具有类型安全类参数的通用(非静态)方法,它是如何工作的?

c++ - 在范围内创建指针时,当指针超出范围时,指向的变量会发生什么?

c++ - C++17 之前的函数交错

c++ - 将函数引用传递到模板警告 : ignoring attributes on template argument 'func signature'

c++ - 模板部分特化 - 任何真实世界的例子?

Java:为什么在定义字段之前引用字段时没有警告?

c++ - 在 C++ 中访问静态变量

c++ - C++ 应用程序中的 openssl 错误 SSL_ERROR_SSL

c++ - 如何实现向 COM+ 应用程序发送 Recordset ** 参数