2011-10-21 2 views
1

다음과 같은 기능이 있습니다. 자세한 표시 수준에 대한 일반적인 값을 설정해야합니다. 오류 : Iso C++은 격리를 금지합니다. 생성자를 통해이 작업을 수행해야합니까?클래스 속성의 기본값 설정

예, 나는 그것을 시도하고이

arche() 
    { 
    verbosity_ = 1; 
    } 

처럼 일하지만 기억으로는 C++ 기본 멤버 값에 대한 특수 구문이 있습니다. 아마 내가 사용해야 할 것입니다. 이게 뭐야?

class test 
    { 
    protected: 
     short verbosity_=1; // this does not work 
    public: 
     void setVerbosity(short v) 
     { 
     if((v==0 || v==1)) 
      { 
      verbosity_ = v; 
      } 
     else 
      { 
      cout << " Verbosity Level Invalid " << endl; 
      } 
     } 
     virtual void runTest() = 0; 
    }; 
+0

중복 가능성 http://stackoverflow.com/questions/ 846673/struct-member-of-a-class에 대한 default-init-value) –

+0

질문에 대한 대답을 편집하지 마십시오. –

답변

3

C++ 98 및 2003에서는 그렇게 할 수 없습니다. 생성자를 통해이를 수행해야합니다.

최신 표준 인 C++ 11에서는 사용하려는 구문을 사용할 수 있습니다.

+0

부스트가 포함됩니까? 주제를 벗어난 ... – user1001776

1

C++ 98 및 C++ 03에서 mayonly 초기화 static const 회원이 좋아요.

struct T { 
    int x = 3; 
}; 

int main() { 
    T t; 
    std::cout << t.x; 
} 

// prog.cpp:4: error: ISO C++ forbids initialization of member ‘x’ 
// prog.cpp:4: error: making ‘x’ static 
// prog.cpp:4: error: ISO C++ forbids in-class initialization of non-const static member ‘x’ 


struct T { 
    static const int x = 3; 
}; 

int main() { 
    T t; 
    std::cout << t.x; 
} 

// Output: 3 

그렇지 않으면 당신은 ctor에-initialiser 사용 must :

struct T { 
    int x; 
    T() : x(3) {} 
}; 

int main() { 
    T t; 
    std::cout << t.x; 
} 

// Output: 3 

그러나의를 C++ 11 할 그것을위한 내장 유형 :

4

C에서 할 수 있습니다. onstructor, 당신이 할당이 필요하지 않지만, 당신과 같이 초기화 구문을 사용할 수 있습니다 :

test::test() : verbosity_(1) 
{ 
} 
+0

정확하게 내가 Edgars가 몇 분 전에 말했던 것입니다 ... 답변을 게시하기 전에 페이지를 새로 고쳐야합니다. – filipe

2

03 C++에서 생성자에 짧은 멤버를 초기화해야합니다. A (제한) 해결책으로서

, 정수 유형 일하는 것이 다음

template <class T, T value> 
struct defaulted 
{ 
    T val_; 
    defaulted(): val_(value) {} //by default initializes with the compile-time value 
    defaulted(T val): val_(val) {} 
    operator T() const { return val_; } 
}; 

class test 
    { 
    protected: 
     defaulted<short, 1> verbosity_; 
    public: 
     void setVerbosity(short v) 
     { 
     if((v==0 || v==1)) 
      { 
      verbosity_ = v; 
      } 
     else 
      { 
      cout << " Verbosity Level Invalid " << endl; 
      } 
     } 
     virtual void runTest() = 0; 
    }; 
([클래스 구조체 부재 디폴트 초기화 값]의