저는 이니셜 라이저 목록을 사용하여 다음과 같이 몇 번 실행 했으므로 잘 설명하지 못했습니다. 사람이 (내가 오타를 잡을 수있는 컴파일러, 그래서 나와 함께 부담하지 않습니다) 다음과 같은 실패 이유를 정확히 설명 할 수 :생성자 이니셜 라이저에있는 멤버의 멤버 함수를 사용합니다.
class Foo
{
public:
Foo(int i) : m_i(i) {} //works with no problem
int getInt() {return m_i;}
~Foo() {}
private:
int m_i;
};
class Bar
{
public:
Bar() :
m_foo(5), //this is ok
m_myInt(m_foo.getInt()) //runtime error, seg 11
{}
~Bar() {}
private:
Foo m_foo;
int m_myInt;
};
멤버의 멤버 함수를 호출하려고 초기화 목록을 높은 초기화, 내가 할 seg faults. 나는 이것이 알려진 문제 (또는 아마도 어쨌든 디자인에 의한 것임)를 떠올리는 것처럼 보이지만 잘 묘사 된 것을 본 적이 없다. 첨부 된 예제는 일반 오래된 데이터 형식으로 고안되었지만 Bar::m_myInt
을 기본 (빈) 생성자가없는 다른 개체로 대체하면 문제가 더욱 현실적입니다. 누구나 나를 계몽시킬 수 있습니까?
'~ Foo() {}'에 대해 Typo :'~ Foo {}'? –
이것은 Cygwin에서 오류없이 GCC 3.4.3을 사용하여 컴파일되고 실행됩니다. 어떤 컴파일러를 사용하고 있습니까? – andand