6

在这里对我来说非常简单的任务,我不确定为什么这会给我带来问题,我只是让两个模型类尝试在它们的方法中没有任何逻辑的情况下使用已经给我的标题和声明进行编译。老实说,这只是一个剪切和粘贴的工作,但我仍然遇到了这个金块般的爱情——

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(){

  }
}
4

3 回答 3

19

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

编辑:错过了你的错误的结尾: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

  }
}
于 2012-11-08T18:39:48.123 回答
2

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

于 2012-11-08T18:39:45.567 回答
1

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

#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){

  }
于 2012-11-08T18:39:57.530 回答