2017-11-27 6 views
1

내가 같은 외모에 노력하고있는 과제의 일부에 대한 요구 사항을 예상 :매크로 나는 현재 학교 프로젝트에서 일하고 있어요 익스프레션

클라이언트가 있는지 확인하기 위해 참조 할 수있는 오류 상태 개체에 유효한 날짜가 있고, 그렇지 않은 경우 날짜의 어느 부분에 오류가 있습니다.

NO_ERROR 0 -- No error - the date is valid 
CIN_FAILED 1 -- istream failed on information entry 
YEAR_ERROR 2 -- Year value is invalid 
MON_ERROR 3 -- Month value is invalid 
DAY_ERROR 4 -- Day value is invalid" 

: 그리고

void errCode(int errorCode); 

이 함수 나열된 값 중 하나로 오류 상태 변수를 설정 가능한 오류 상태는 정수 값 Date 클래스 헤더 매크로 로 정의 위. 내가 두 번째 기능 비주얼 스튜디오로 내 코드를 넣어 그러나

나에게 빨간색 밑줄를 제공하고 내가 if 문에서 매크로 값을 사용하려고하면 "이 식을 예상"상태. 그들은 당신이 그들을 위해 정의한대로로 대체하고 있기 때문에

#define NO_ERROR = 0  // No error - the date is valid 
#define CIN_FAILED = 1  // istream failed on information entry 
#define YEAR_ERROR = 2  // Year value is invalid 
#define MON_ERROR = 3  // Month value is invalid 
#define DAY_ERROR = 4  // Day value is invalid 
+2


C에서 그렇게하는 올바른 방법은 ++ enum classDate 클래스 (구조체)의 내부에 선언 사용하는 것입니다 매크로 정의에서 등호 제거 – MrTux

+0

누구나 매크로 사용을 중단하고 현대식 (C++ 14, C++ 17) 열차를 타야한다고 쓴 사람. –

답변

1

매크로가 = 연산자를 필요로하지 않는다 :

// this code is unfinished and partial 

void Date::errCode(int errorCode) 
{ 
    if (errorCode == NO_ERROR) // <- red underline here 
    { 
     m_errorState = NO_ERROR; // <- red underline here 
    } 
    if (errorCode == 1) 
    { 
    } 
} 

헤더 파일은 다음과 같이 정의한다. 귀하의 경우에 errorCode == NO_ERRORerrorCode == 0 대신 errorCode == = 0과 같을 것입니다.

그냥 등호 기호를 삭제 :

#define NO_ERROR 0  // No error - the date is valid 
#define CIN_FAILED 1  // istream failed on information entry 
#define YEAR_ERROR 2  // Year value is invalid 
#define MON_ERROR 3  // Month value is invalid 
#define DAY_ERROR 4  // Day value is invalid 
+1

감사합니다. 물론 쉬운 일입니다. –

+0

@QuintonWells 매크로 정의 대신'enum class '를 사용하십시오 :'enum class ErrCodes {NO_ERROR, CIN_FAILED,/* ... * /};' – user0042

+0

@ user0042 또는 심지어 보다 나은; 'enum class'. –

0

을 당신이 당신이 그들을 피할 수 있습니다 때마다 매크로를 사용하지 않으려는 C++로. 이것은 주로 c-preprocessor 매크로가 단순히 텍스트를 대체하기 때문에 발생하는 것으로, 경험이없는 (또는 인식되지 않는) 독자의 코드에 대한 예기치 않은 코드 결과가 발생하기 때문입니다.

당신이 잘못된 매크로되어 정의 물론 구문 오류로 연결

if (errorCode == = 0) 
       // ^^^ 

같은 텍스트 확대로 이어집니다. 다음

class Date { 
public: 
    enum class ErrorCodes { 
     NO_ERROR = 0  // No error - the date is valid 
     , CIN_FAILED = 1  // istream failed on information entry 
     , YEAR_ERROR = 2  // Year value is invalid 
     , MON_ERROR = 3  // Month value is invalid 
     , DAY_ERROR = 4  // Day value is invalid 
    }; 
private: 
    void errCode(); 
    ErrorCodes m_errorState; 
}; 

와 같은 그것을 참조 :

void Date::errCode(Date::ErrorCodes errorCode) { 
     m_errorState = errorCode; 
} 
관련 문제