【问题标题】:Cannot convert 'idt_entry_t (*)[256] to u8int*无法将 'idt_entry_t (*)[256] 转换为 u8int*
【发布时间】:2012-02-20 22:49:50
【问题描述】:

我正在努力

memset(&idt_entries, 0, sizeof(idt_entry_t)*256);

产生

错误:无法将参数 '1' 的 'idt_entry_t (*)[256] {aka idt_entry_struct ()[256]}' 转换为 'u8int {aka unsigned char*}' 到 'void memset(u8int*, u8int, u32int)'

如果有帮助,那就是用 extern "C" {...} 包装的 C 代码。

谢谢!

【问题讨论】:

  • 请张贴idt_entries的声明。我对错误消息中的(*) 感到困惑。
  • 如果您对memset 的参数使用正确的类型而不是硬编码虚假类型,这可能会有所帮助...

标签: c++ c kernel osdev


【解决方案1】:

您是否将其编译为 C++?

添加演员表。

memset ((u8int*)idt_entries, 0, sizeof(idt_entry_t)*256);

【讨论】:

    【解决方案2】:

    idt_entriesidt_entry_t 的数组 256。

    数组idt_entries 的值是指向其第一个元素的指针。将此值用作memset 的第一个参数。你的数组大小是sizeof idt_entries

    那么这里是如何正确调用memset将所有数组元素设置为0:

    memset(idt_entries, 0, sizeof idt_entries);
    

    【讨论】:

    • 您似乎在使用非标准的memset 函数。您必须将第一个参数转换为 memset 函数的第一个参数的类型。将我示例中的第一个参数转换为 uint8t *
    【解决方案3】:

    idt_entries 已经是一个指针。删除 & 符号:

    memset (idt_entries, 0, sizeof(idt_entry_t)*256);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-21
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多