【问题标题】:Error Message "invalid conversion from ‘void*’ to ‘unsigned int’"错误消息“从‘void*’到‘unsigned int’的无效转换”
【发布时间】:2014-12-25 08:49:09
【问题描述】:

我有这个unsigned int 函数(它是任务的给定函数)

// read data from virtual memory
unsigned int read(const int index) {
    return speicher[index];
}

speicher[index] 是一个数字,我必须将其解码为 4 个组件。第一个组件是speicher[index] mod 16 的值,第二个组件是(speicher[index])/(16*16)mod16 的值我想等等。

带有错误消息的其他示例。也许我无法理解该函数的作用:

对我来说,函数read(const int index) 应该返回一个无符号整数,我可以在程序中像“正常”的其他无符号整数一样使用它。

unsigned int index = 0;
unsigned int test = 1;
do {
    unsigned int hexzahl = read(index);
    test = read(index);
    index = index + 1;
} while (index <= 255 && read(index) != 0);
// 37 actually i want, that the program breaks if the content of read(index) is 0

我无法理解错误信息:

main.cpp:在函数“int main()”中:

main.cpp:37: 错误:ISO C++ 禁止指针和整数之间的比较

main.cpp:37: 错误:从‘char* ()(const char, int)’到‘int’的无效转换

main.cpp:37: 错误:初始化“unsigned int memory_read(int)”的参数 1

【问题讨论】:

  • 大概speicher 持有void *
  • 请在错误日志中粘贴行号和准确代码 +/- 5 行,围绕产生错误的行。
  • speicher的类型是什么?
  • unsigned int hexzahl = (cout &lt;&lt; dec &lt;&lt; read(index)); 不应该编译。
  • 请发布完整的错误信息,不要转述。 note: candidate is: std::basic_ios&lt;_CharT, _Traits&gt;::operator void*() const [with _CharT = char; _Traits = std::char_traits&lt;char&gt;] &lt;near match&gt; operator void*() const 是错误信息的重要部分。

标签: c++


【解决方案1】:

你希望这会做什么?

unsigned int hexzahl = (cout << dec << read(index));

这会打印该值,然后尝试将cout 流的状态分配给一个整数。这毫无意义,这就是它无法编译的原因。

如果你想将hexzahl 设置为read 的结果,那么就这样做吧:

unsigned int hexzahl = read(index);

如果您想打印该值,请单独执行:

cout << dec << hexzahl;

如果您想要的不是read 的结果,那么请更新问题以描述您想要做什么。

【讨论】:

  • 不过,我看不出使用void * 而不是ostream 的错误的任何原因。
  • @chris:可能是因为(在 C++11 之前)有一个 operator void* 允许 if (cout) 但不允许转换为整数类型。这些天来,有一个 explicit operator bool() 代替。
  • 内存[index] 是一个十六进制数。我必须将这个数字解码为 4 个部分。所以我想输出 memory[index] 的内容,然后取数字的 mod 16。
  • @Susliks:您必须在单独的语句中输出它。在初始化hexzahl 之后执行cout &lt;&lt; dec &lt;&lt; hexzahl;
  • 我试着把我的答案写得更好。是的,我明白了,cout
【解决方案2】:

错误是因为语句:

unsigned int hexzahl = (cout << dec << read(index));

cout 的返回类型是void *。您正在尝试将 void * 分配给 unsigned int,这就是您发现错误的原因。

上述语句在 C printf 中是允许的,但在 C++ cout 中是不允许的。

unsigned int hexzahl = (printf("%u%u", dec,read(index));  //In C language

printf 返回控制台上打印的字符数,即unsigned int。您可能会在 C++ 中尝试相同的方法,但这是不可能的。

【讨论】:

  • 谢谢!你知道我如何返回 read(index) 的值吗?这样我就可以在值 0 和 read(index) 的值之间进行比较?
  • 如果您发布整个程序,我可以更好地帮助您。或者至少是名为 memory_read(int a); 的方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-26
  • 1970-01-01
  • 2015-06-07
  • 1970-01-01
  • 2010-12-02
  • 1970-01-01
相关资源
最近更新 更多