【问题标题】:void pointer argument, pass buffervoid 指针参数,传递缓冲区
【发布时间】:2013-10-28 18:22:23
【问题描述】:

我有一个如下所示的对象缓冲区实现:

class obj_buffer_t
{
public:
    obj_buffer_t(char *heap, size_t size, size_t cnt);
            // Some other stuff
private:
            // Some other stuff
};

record_objbuf 被创建为静态缓冲区:

static obj_buffer_t::buffer_t<obj_buffer_min_heap_size_t< sizeof(Record_XY), RECORD_SIZE>::result> record_buffer;
obj_buffer_t record_objbuf(record_buffer.heap, sizeof record_buffer.heap, RECORD_SIZE);

在我的程序中,我想读取记录并在这个缓冲区中创建它们,但是我必须如何调用我的方法?

方法签名如下:

Record * getRecord(unsigned & addr, Info & info, void * objbuf = NULL);

我的电话:

record = tm.getRecord(p, info, static_cast<obj_buffer_t *>(record_objbuf));

编译器给了我错误:从obj_buffer_t 类型到obj_buffer_t* 类型的无效静态转换

如果我根本不使用演员表,我会得到:

没有匹配函数调用getRecord(uint32_t&amp;, Info&amp;, obj_buffer_t&amp;)

我在这里做错了什么?

谢谢!

【问题讨论】:

  • 我的意思不是刻薄,但在我看来,您在掌握所需的基础知识之前就在搞乱一些高级 C++ 功能。

标签: c++


【解决方案1】:

错误“从类型 obj_buffer_t 到类型 obj_buffer_t* 的静态转换无效”意味着 record_objbuff 是对象本身,而不是指向该对象的指针。您的函数需要指针。所以你应该使用一元&amp; 运算符来获取对象的地址作为指针:

record = tm.getRecord( p, info, (void*)&record_objbuf );

【讨论】:

  • 这是我一开始写的,编译器仍然给我一个错误信息:没有匹配函数调用'getRecord(uint32_t&, Info&, obj_buffer_t*)'
  • 那么,让我们试试record = tm.getRecord( p, info, (void*)&amp;record_objbuf )
猜你喜欢
  • 1970-01-01
  • 2021-04-08
  • 2014-01-02
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
  • 2010-12-28
相关资源
最近更新 更多