错误:上一个规范后给出的参数默认参数

Error: default argument given for parameter after previous specification

本文关键字:参数 默认 上一个 错误      更新时间:2023-10-16

在这里对我来说非常简单的任务,我不确定为什么这给我问题,我只是在进行两个模型类,尝试在没有任何逻辑的情况下使用headers进行编译并已经发表了声明。老实说,这只是一项削减和粘贴的工作,但我仍然遇到了这种爱的金块 -

cbutton.cpp:11:44: error: default argument given for parameter 4 of ‘cio::CButton::CButton(const char*, int, int, bool, const char*)’ [-fpermissive]
cbutton.h:7:5: error: after previous specification in ‘cio::CButton::CButton(const char*, int, int, bool, const char*)’ [-fpermissive]
cbutton.cpp:11:44: error: default argument given for parameter 5 of ‘cio::CButton::CButton(const char*, int, int, bool, const char*)’ [-fpermissive]
cbutton.h:7:5: error: after previous specification in ‘cio::CButton::CButton(const char*, int, int, bool, const char*)’ [-fpermissive]
cbutton.cpp:19:41: error: default argument given for parameter 1 of ‘void cio::CButton::draw(int)’ [-fpermissive]
cbutton.h:11:10: error: after previous specification in ‘virtual void cio::CButton::draw(int)’ [-fpermissive]
cbutton.cpp:53:29: error: ‘virtual’ outside class declaration

这是我正在使用的文件。一如既往地感谢大家!

#include "cfield.h"
namespace cio{
  class  CButton: public CField{
  public:
    CButton(const char *Str, int Row, int Col, 
            bool Bordered = true,
            const char* Border=C_BORDER_CHARS);
    virtual ~CButton();
    void draw(int rn=C_FULL_FRAME);
    int edit();
    bool editable()const;
    void set(const void* str);
  };
}    


#include "cbutton.h"
namespace cio {  
  CButton::CButton(const char *Str, int Row, int Col, 
          bool Bordered = true,
          const char* Border=C_BORDER_CHARS){
  }
  void CButton::draw(int rn=C_FULL_FRAME){
  }
  int CButton::edit(){
    return 0;
  }
  bool CButton::editable()const {
  return false;
  }
  void CButton::set(const void* str){
  }
  virtual CButton::~CButton(){
  }
}

您在函数的定义中指定了一个默认参数,而它们已经在类声明中具有默认参数。您可以在类声明或函数定义中声明默认参数,但不能同时声明。

编辑:错过了错误的结束:error: ‘virtual’ outside class declaration。这是一个相当清晰的编译器错误:virtual关键字属于类声明,而不是函数定义。只需将其从破坏者的定义中删除。

校正来源:

namespace cio {  
  CButton::CButton(const char *Str, int Row, int Col, 
          bool Bordered, // No default parameter here,
          const char* Border){ // here,
  }
  void CButton::draw(int rn){ // and here
  }
  CButton::~CButton(){ // No virtual keyword here
  }
}

定义函数时,您不允许重复默认参数。他们仅属于声明。(实际规则并不那么简单,因为定义也可以是一个定义,但是您明白了...)

您不包括函数定义中的默认参数,原型是您唯一需要将默认值包含在。

中的原型。
#include "cbutton.h"
namespace cio {  
  CButton::CButton(const char *Str, int Row, int Col, 
          bool Bordered,
          const char* Border){ //remove in def
  }
  void CButton::draw(int rn){
  }