【问题标题】:Invalid type argument of unary ‘*’一元“*”的类型参数无效
【发布时间】:2012-03-26 21:06:41
【问题描述】:

我的 Arduino C++ 代码有问题。这是函数:

  void sendDeviceName(){
  char buffer[3] = "";
  incomingCommand.toCharArray(buffer, 3);
  int deviceNumber = atoi(*buffer[2]);
  Serial.println(EEPROMreadDevice(deviceNumber));
}

当我尝试编译我的代码时,编译器返回:

错误:一元“*”的类型参数无效

我试图自己修复它,但我不去。

【问题讨论】:

  • 你到底想做什么?代码没有任何意义,为了使它有意义,我们需要知道它应该做什么。最有可能的是:atoi(buffer+2)(或atoi(&buffer[2]) 而不是atoi(*buffer[2])。但很难确定。

标签: c++ c arduino


【解决方案1】:

buffer[2]char,而不是 char *,因此您不能取消引用它。

【讨论】:

  • 感谢帮助。现在一切正常
  • @bigben:别忘了接受能解决你问题的答案。
【解决方案2】:

错误来自buffer[2]char,而不是指针。这里没有什么可以取消引用的。如果您尝试将代表数字的char 转换为相应的int 值,请使用:

int deviceNumber = buffer[2] - '0';

或者通常如果您想要 char 数组的最后 N-K 个字符,请使用:

int deviceNumber = atoi(buffer + K);

所以在你的情况下:

int deviceNumber = atoi(buffer + 2);

【讨论】:

    【解决方案3】:

    我试图自己修复它,但我不去。

    嗯,表达式buffer[2] 的类型是char。您不能取消引用 char。也许你的意思是……

    buffer + 2
    

    相当于

    &buffer[2]
    

    ?

    这将编译,但作为 atoi 的参数它是错误的:atoi 需要一个包含至少一个数字的以零结尾的字符串,并且指向 buffer 的最后一个元素的指针最多可以是指向终止空字节(没有数字)的指针。

    也许这就是你想要的:

    atoi( buffer )
    

    或者如果你想要一个存储在索引 2 的数字:

    buffer[2] - '0'
    

    (C++保证十进制数字的字符代码是连续的)。

    或者如果 char 值直接是您的整数值:

    buffer[2]
    

    【讨论】:

      猜你喜欢
      • 2012-08-18
      • 2021-10-15
      • 2011-12-10
      • 1970-01-01
      • 2016-06-01
      • 2014-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多