0

假设我有这个示例模板:

template<class T>
class Wrapper
{
virtual T* ReturnPtr() = 0;
};

然后我继承它:

class Buffer; //some class
class BufferWrapper : public Wrapper<Buffer>
{
virtual Buffer* ReturnPtr(); //<< (1.)
}
  1. 这是正确的方法吗?当我这样写它时,它不会给我任何智能感知错误,但是一旦我在某处写 ReturnPtr(),它就会告诉我“对象具有与成员函数不兼容的类型限定符”。
  2. 这是否意味着不可能使用这样的虚拟方法?
4

1 回答 1

3

当您在对象上调用非const函数时,Intellisense 会显示该消息const。正如我们所见,ReturnPtr是非常量。您可能会看到此消息通常有两个原因。第一个是当您尝试调用类型ReturnPtrconst对象时BufferWrapper

const BufferWrapper bw;
bw.ReturnPtr(); // Can't call non-const member function on const object

第二种是当您的BufferWrapper对象是类的数据成员并且您从该类的成员函数中调用ReturnPtr它时:const

struct SomeClass
{
  BufferWrapper bw;

  void SomeClass::SomeFunc() const
  {
    bw.ReturnPtr(); // Cannot call non-const member function here
  }
}
于 2013-02-10T20:04:27.857 回答