문제

다음 기본 클래스를 정의한 코드를 작성하고 있습니다.

class Chorus{
  public:

    //Destructor
    virtual ~Chorus();

    //callback function
    virtual int callback( void *outputBuffer, void *notUsed, unsigned int 
       nBufferFrames, double streamTime, RtAudioStreamStatus status, void *userData );

    virtual void initializeDelayBuffer(void);

    virtual void destroyDelayBuffer(void);
};

나는 이것을 기본 클래스로 사용하고 실제로 그 자체로는 아무것도하지 않습니다. 그래서 나는이 클래스 코러스에서 파생 된 두 개의 별도 수업이 있습니다. 파생 된 코러스 클래스에 대한 기본적인 제약을 단순히 제공하기 위해이 작업을하고 싶었습니다. 해야 하다 내 프로그램에서 사용할 수있는 것으로 간주되어야합니다.

프로젝트를 구축 할 때 (Visual Studio 2008),이 코러스 클래스의 모든 가상 함수에 대해 해결되지 않은 외부 기호 오류가 발생합니다. 이 기능에 대한 선언을하지 않은 일반적인 오류라고 생각합니다. 그러나 그들은 가상이고 나는 그들이 파생 클래스 내에서 정의 될 때까지 실제로 무엇이든 할 수 있도록 정의되기를 원하지 않기 때문에이 문제를 해결하려면 어떻게해야합니까?

도움이 되었습니까?

해결책

당신의 의도가 단순히 아동 클래스를 구현할 수있는 소지자가 되려고한다면, = 0으로 끝나면 순수한 가상 함수를 만듭니다.

virtual void destroyDelayBuffer(void) = 0;

이것은 "추상적"이라는 방법을 말해줍니다. C ++ 컴파일러는 메소드의 실제 정의를 찾지 않고 대신 인스턴스를 생성하기 전에 모든 파생 클래스가 이러한 방법을 구현하도록 강요합니다.

다른 팁

해당 기능을 순수한 가상으로 선언해야합니다.

가상 void 초기화 된 elaybuffer (void) = 0;

그것은 당신이 원하는 종류의 인터페이스를 만들 것입니다.

이것을 순수한 가상 함수라고합니다. C ++에서는 함수 이름 뒤에 "= 0"을 작성하지만 아마도 FAQ를 읽고 싶을 것입니다.

http://www.parashift.com/c++-faq-lite/abcs.html#faq-22.4

함수를 순수한 가상 함수로 정의해야합니다. 이렇게하려면 각 선언 후에 "= 0"을 추가하십시오. 예를 들어:

virtual void destroyDelayBuffer(void) = 0;

순수한 가상 기능 사용 :

  virtual int callback( void *outputBuffer, void *notUsed, unsigned int 
       nBufferFrames, double streamTime, RtAudioStreamStatus status, void *userData ) = 0;

위의 답변에 추가하기 위해 순수한 가상 함수가 포함 된 클래스의 객체를 인스턴스화 할 수는 없으므로 미래에 기본 클래스의 객체를 갖기 위해서는 기능이 아닌 가상을 만들어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top