【问题标题】:Argument type 'void' is incomplete参数类型“void”不完整
【发布时间】:2023-03-05 06:45:01
【问题描述】:

我正在尝试编写这个相对简单的代码,我希望能够在其中更改 set_current 的值。 错误消息:“参数类型 'void' 不完整”不断出现,我不知道为什么。

我不是经验丰富的编码员,但我必须解决这个问题才能工作。我真的希望你能帮助我。

void setCurrent(float set_current);

int main () { 
    printf("%i", setCurrent(0));
    printf("/n/r");
}

void setCurrent(float set_current){
    float v_set_cur = 1.25 + (ILIM_K_USE*set_current);

“参数类型'void'不完整”出现在 printf 行。当我删除 0 时,它可以工作,但我希望能够更改该数字。 我在这里错过了什么?

【问题讨论】:

  • setCurrent 返回类型 void。您将其作为参数传递给printf
  • 另外,只标记使用的语言。 C 还是 C++?
  • “删除 0”我假设您的意思是 printf("%i", setCurrent);。如果编译时没有警告,我建议您尝试在编译器中调高警告级别。对于 gccclang-Wall -Wextra 很好,对于 MSVC /W4/W3。因为您正在使用"%i" 打印指针,这通常不是您想要做的。
  • Handy reading 关于void的性质

标签: c++ c void incomplete-type


【解决方案1】:

您已将 setCurrent 声明为返回 void(即,什么都没有),但在 printf("%i", setCurrent(0)); 中,您希望它返回 int。其中一件事情需要改变。

【讨论】:

    【解决方案2】:

    我在这里错过了什么?

    您错过了函数setCurrent 需要返回一个可以打印的值。换句话说——函数定义不能是void

    我的猜测是你想要的:

    float setCurrent(float set_current);  // Notice float instead of void
    
    int main () { 
        printf("%f", setCurrent(0));      // Notice %f instead of %i
        printf("/n/r");
    }
    
    float setCurrent(float set_current){                    // Notice float instead of void
        float v_set_cur = 1.25 + (ILIM_K_USE*set_current);  // Calculate value
        return v_set_cur ;                                  // Return the value
    }
    

    【讨论】:

      【解决方案3】:

      当您调用 setCurrent 时,不会返回任何内容。 void 函数本身不返回值。根据您的 printf 语句,您期望调用 setCurrent 时得到一个整数。看来您想返回一个浮点数,因为 v_set_curr 是一个浮点数。

      float setCurrent(float set_current);
      
      int main () { 
          printf("%f", setCurrent(0));
          printf("/n/r");
      }
      
      float setCurrent(float set_current){
          float v_set_cur = 1.25 + (ILIM_K_USE*set_current);
          return v_set_cur;
      }
      

      【讨论】:

      • 感谢您的反馈!
      【解决方案4】:

      void返回类型不返回任何值;所以打印操作你应该在setCurrent函数里面做。
      试试这个代码

      void setCurrent(float set_current);
      
      int main () { 
          setCurrent(0);
          printf("/n/r");
      }
      
      void setCurrent(float set_current){
          float v_set_cur = 1.25 + (ILIM_K_USE*set_current);
          printf("%.2f", v_set_cur);
      } 
      

      【讨论】:

      • 我建议不要这样做。一个函数应该尽可能地接近一件事。应该设置一个set 函数。 print 函数应该打印出来。结合职责往往会降低功能的可用性并且更难以验证。
      猜你喜欢
      • 1970-01-01
      • 2011-08-25
      • 1970-01-01
      • 2021-05-09
      • 2023-04-05
      • 1970-01-01
      • 2022-10-31
      • 2021-10-22
      • 2021-04-18
      相关资源
      最近更新 更多