【问题标题】:Missing default argument - compiler error缺少默认参数 - 编译器错误
【发布时间】:2011-08-10 01:31:57
【问题描述】:
void func ( string word = "hello", int b ) {

  // some jobs

}

in another function

 //calling 
 func ( "", 10 ) ;

当我编译它时,编译器会发出错误;

default argument missing for parameter 

如何在不改变任何东西的情况下修复它,当然,例如不制作 "int b = 0" ? 此外,我想使用 func ( 10 ) 或 func ( "hi" ) 之类的函数吗? 我的编译器没有正常工作吗?

【问题讨论】:

标签: c++ g++ default-arguments


【解决方案1】:

在默认参数开始之后不能有非默认参数。换句话说,您如何为b 指定一个值,而将word 保留为默认值“hello”?

【讨论】:

    【解决方案2】:

    具有默认值的参数必须位于参数列表的末尾。

    所以只需将你的函数声明更改为

    void func(int b, string word = "hello")
    

    【讨论】:

      【解决方案3】:

      具有默认值的参数必须位于列表的末尾,因为在调用函数时,您可以将参数放在末尾,但不能在中间错过它们。

      由于你的参数有不同的类型,你可以使用重载获得相同的效果:

      void func ( string word, int b ) {
      
        // some jobs
      
      }
      
      void func ( int b ) { func("hello", b); }
      

      【讨论】:

      • +1 用于建议重载,它完全实现了默认中间参数的调用语法。
      【解决方案4】:

      错误信息是正确的。如果将默认参数分配给给定参数,则所有后续参数都应具有默认参数。您可以通过 2 种方式修复它;

      (1)改变参数的顺序:

      void func (int b, string word = "hello");
      

      (2) 给b赋值一个默认值:

      void func (string word = "hello", int b = 0);
      

      【讨论】:

        【解决方案5】:

        你不能不改变任何东西就修复它!

        要修复它,您可以使用重载:

        void func ( string word, int b ) {
          // some jobs
        }
        
        void func ( string word ) {
            func( word, 999 );
        }
        
        void func ( int b ) {
            func( "hello", b );
        }
        

        【讨论】:

          猜你喜欢
          • 2016-06-08
          • 2017-12-09
          • 2020-07-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-06-29
          • 1970-01-01
          相关资源
          最近更新 更多