2012-11-08 4 views
1

나를 위해 매우 간단한 작업이 왜 내가이 문제를 일으키는 지 모르겠다. 두 개의 모형 클래스를 작성하여 해당 방법에 어떤 논리도없이 컴파일하려고한다. 이미 나에게 주어진 헤더와 선언을 사용한다. 솔직히이 무엇보다 그냥 잘라 내기 및 붙여 넣기 작업을 더, 아직 나는 아직도 사랑의 황금 덩어리 통해 온 - 오류 : 이전 지정 후 매개 변수에 주어진 기본 인수

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

    } 
} 

답변

10

함수의 정의에 기본 인수를 지정했으나 클래스 선언의 기본 인수 클래스 선언 또는 함수 정의에서 기본 인수를 선언 할 수 있지만 둘 다를 선언 할 수는 없습니다.

편집 : 오류의 마지막을 놓친 : 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 

    } 
} 
+0

놀라운 놀라운 놀라운, 내 유일하게 남은 문제는 컴파일러가 당신은 당신의 마지막 오류에 대한 내 편집을 참조하십시오 :) 환영합니다 –

+0

저 멀리에 ... 얻을 두지 않을 내 소멸자에서 가상 키워드입니다. – Synxis

0

함수를 정의 할 때 기본 인수를 반복해서 사용할 수 없습니다. 그들은 선언문에만 속합니다. 정의는 정의 일 수도 있기 때문에 실제 규칙은 그다지 간단하지 않지만 아이디어를 얻을 수 있습니다 ...)

0

당신은 당신의 함수 정의의 기본 매개 변수를 포함하지 말아은 프로토 타입은 당신이에 기본 값을 포함 할 필요가있는 유일한 사람입니다.

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

    } 
+0

당신은 기본 인수를 남겨 두었습니다 :'Bordered = true';) – Synxis

+0

아, 고마워. –