Ошибка: аргумент по умолчанию задан для параметра после предыдущей спецификации

Для меня это очень простая задача, и я не уверен, почему это создает мне проблемы. Я просто заставляю два класса-макета пытаться компилировать без какой-либо логики в своих методах с использованием уже предоставленных мне заголовков и объявлений. Честно говоря, это всего лишь работа по вырезке и вставке, и все же я все еще сталкивался с этим золотым самородком любви —

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

}
}

2

Решение

Вы указали аргумент по умолчанию в определении функции, в то время как они уже имели аргумент по умолчанию в объявлении класса. Вы можете объявить аргументы по умолчанию в объявлении класса или в определении функции, но не в обоих.

РЕДАКТИРОВАТЬ: Пропустил конец ваших ошибок: 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

}
}
12

Другие решения

Вы не включаете параметр по умолчанию в определение своей функции, прототип — единственный, в который нужно включить значение по умолчанию.

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

}
1

Вы не можете повторять аргументы по умолчанию при определении функции. Они принадлежат только на декларации. (Действительное правило не так просто, потому что определение также может быть определением, но вы поняли …)

0
По вопросам рекламы [email protected]