1

こんにちは、私はここで初めてです。ネストされたクラスでコンストラクターを宣言するときにエラーが発生しました。

Eventという名前のクラスがあり、それを継承する2つのネストされたクラス、SampleEventとTimeEventがあり、SampleEventとTimeEventコンストラクターにエラーがあります。

これが私のコードです:

// Event Class
#ifndef EVENT_H
#define EVENT_H

#include <iostream>

namespace Engine
{
    namespace Data
    {
        class Event
        {
            public:
                // Class Variable
                int Measure;
                int Beat;
                int Position;

                // This Class that was I mean
                class SampleEvent;
                class TimeEvent;

                // Constructor
                Event(int measure, int beat, int pos);
        };

        // Sample Event Class
        class Event::SampleEvent : public Event
        {
            public:
            // variable in SampleEvent Class
            int ID;
            float Pan;
            float Vol;

            // Constructor
            SampleEvent(int id, float pan, float vol, int measure, int beat, int pos);
        };

        // Time Event Class
        class Event::TimeEvent : public Event
        {
            public:
            // variable in TimeEvent Class
            double Value;

            // Constructor
            TimeEvent(double value, int measure, int beat, int pos);
        };

        // Constructor of Event
        Event::Event(int measure, int beat, int pos)
        {
            Measure         = measure;
            Beat            = beat;
            Position        = pos;
        }

        // Constructor of Sample Event
        Event::SampleEvent::SampleEvent(int id, float pan, float vol, int measure, int beat, int pos) : Event::Event(measure, beat, pos)
        {
            ID                      = id;
            Pan                     = pan;
            Vol                     = vol;
            Measure         = measure;
            Beat            = beat;
            Position        = pos;
        }

        // Constructor of Time Event
        Event::TimeEvent::TimeEvent(double value, int measure, int beat, int pos) : Event::Event(measure, beat, pos)
        {
            Value                   = value;
            Measure         = measure;
            Beat            = beat;
            Position        = pos;
        }
    }      
}
#endif

これは私に2つのエラーを与えます:

Error C2039: '{ctor}' : is not a member of 'Engine::Data::Event' (line 60)
Error C2039: '{ctor}' : is not a member of 'Engine::Data::Event' (line 71)

誰かが私を助けることができますか?ありがとう

4

1 に答える 1

0

int Positionセミコロンがありません。

また、コードの最後に閉じ括弧がありません。

        }      
    } // <--- MISSING
}

ただし、コードの主な問題は、コンストラクターを定義したため、デフォルトのコンストラクターが暗黙的に定義されていない(使用できない)ため、基本クラスのコンストラクターを明示的に初期化する必要があることですEvent(int measure, int beat, int pos);

Event::SampleEvent::SampleEvent(int id, float pan, float vol, 
                               int measure, int beat, int pos)
: Event(id, id, id) // This is just an example, pass the proper values here
{
   //...
}

Event::TimeEvent::TimeEvent(double value, int measure, int beat, int pos)
: Event(measure, measure, measure) // Pass the proper values to base ctor

編集

エラーは、のEvent::Event(measure, beat, pos)代わりにを使用したためですEvent。(ただし、これは機能するEvent::Event はずです。コードを受け入れないというMSVCのバグだと思います。)

于 2013-03-26T03:11:53.370 に答える