2009-08-18 1 views
0

내 코드에서 멤버 함수의 찾아보기 테이블을 만들려고하지만 "복사 할 수없는"클래스를 확장하여 차단 한 내 복사본 생성자를 호출하는 것으로 보입니다. 내가 가진 것은 다음과 같은 것이다. . 라인 왜 이렇게하려고 보이지 않는 복사 생성자를 호출하려고, 나는 이렇게 변경 무엇을해야합니까 -구성원 함수 포인터가 복사 생성자를 호출합니까?

enum {FUN1_IDX, FUN2_IDX, ..., NUM_FUNS }; 

class Foo { 
    fun1(Bar b){ ... } 
    fun2(Bar b){ ... } 
    ... 
    void (Foo::*lookup_table[NUM_FUNS])(Bar b); 
    Foo(){ 
    lookup_table[FUN1_IDX] = &Foo::fun1; 
    lookup_table[FUN2_IDX] = &Foo::fun2; 
    } 

    void doLookup(int fun_num, Bar b) { 
    (this->*lookup_table[fun_num])(b); 
    } 
}; 

오류는 '> (이'는 것입니다 그것은하지 않습니다?

+0

표시되는 정확한 오류 메시지를 게시 할 수 있습니까? –

+0

Foo 복사 생성자 또는 Bar 복사 생성자에 대해 이야기하고 있습니까? 바 (bar)라면, 이것은 정말로 기본적인 문제입니다. Foo가 컴파일 가능한 코드 샘플을 게시하면, 필자가 Foo 클래스를 채우고 Foo를 복사 할 수없는 클래스로부터 상속 받았기 때문에이 코드는 정상적으로 작동했기 때문입니다. –

답변

5

그들을 참조 매개 변수를 확인합니다. C에서

enum {FUN1_IDX, FUN2_IDX, ..., NUM_FUNS }; 

class Foo { 
    fun1(Bar &b){ ... } 
    fun2(Bar &b){ ... } 
    ... 
    void (Foo::*lookup_table[NUM_FUNS])(Bar &b); 
    Foo(){ 
    lookup_table[FUN1_IDX] = &Foo::fun1; 
    lookup_table[FUN2_IDX] = &Foo::fun2; 
    } 

    void doLookup(int fun_num, Bar &b) { 
    (this->*lookup_table[fun_num])(b); 
    } 
}; 

++, 그렇지 않으면 같은 일반 매개 변수를 그냥 객체를 참조하지 않는,하지만 그들은 단지 무엇을 참조합니다 그들에게 참조 매개 변수를 만들기. 이러한 개체 자체입니다 이 문제에있어서, C++은 C와 동일한 의미를 지니고 있습니다 (여기서 당신은 woul 포인터를 사용하십시오).

+0

감사합니다. Foo와 Bar 모두 복사 할 수 없기 때문에 오류 메시지가 혼동스러워서 Foo를 복사하려고한다고 생각했습니다. 물론 그것은 Bar를 복사하려고 시도하고있었습니다. –