1

openFrameworks/C++ は初めてですが、Processing/Java をしばらく使用しています。testApp ヘッダーでクラスを作成したオブジェクトのインスタンス化に問題があります。

エラーがスローされます:

Implicit default constructor for 'testApp' must explicitly initialize the member 'currentSeq' which does not have a default constructor.

ここに私の Sequence.h ファイルがあります:

#pragma once
#include "ofMain.h"

class Sequence{

public:
    Sequence(long _start, long _stop){
        start = _start;
        stop = _stop;
    }

    long start;
    long stop;

};

そして、これは私のtestApp.hです:

#pragma once

#include "ofMain.h"
#include "sequence.h"

class testApp : public ofBaseApp{
    public:

        void setSequences();
        bool needsNewSeq();

        void setup();
        void update();
        void draw();

        void keyPressed(int key);
        void keyReleased(int key);
        void mouseMoved(int x, int y);
        void mouseDragged(int x, int y, int button);
        void mousePressed(int x, int y, int button);
        void mouseReleased(int x, int y, int button);
        void windowResized(int w, int h);
        void dragEvent(ofDragInfo dragInfo);
        void gotMessage(ofMessage msg);

        int numSequences;
        int seqIndex;
        bool isPaused;

        Sequence currentSeq;
        vector <Sequence> sequences;
        ofVideoPlayer myVideo;

};

問題はcurrentSeq変数です。ただし、シーケンスのベクトルは、何らかの理由で問題ありません。このopenFrameworks チュートリアルによると、私はすべてを正しく行っているようです。

4

2 に答える 2

5

Sequence(long, long)パラメータ化されたコンストラクターは、コンパイラーが生成したデフォルトコンストラクターをオーバーライドするため、 のデフォルト コンストラクターが暗黙的に削除されtestAppます。あなたがする行で:

Sequence currentSeq;

testAppの実行可能なコンストラクターがないため、これにより のデフォルト構築が阻害されcurrentSeq、エラーが発生します。これを修正するには、クラスに default-constructor を適用します(およびメンバーも 0 にSequence初期化する必要があります)。startstop

class Sequence
{
public:
    Sequence() : start(0), stop(0)
//  ^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^
    { }

    Sequence(long _start, long _stop)
        : start(_start), stop(_stop) // Use member-initializer list here too
    { }

    long start;
    long stop;

};

または、デフォルト コンストラクターを提供して、次のtestAppようcurrentSeqに構成することもできます。

class testApp : public ofBaseApp
{
    testApp() : currentSeq(0, 0)
    { }
    // ...
};
于 2013-06-02T02:16:40.977 に答える
2

Sequence の引数が 1 つのコンストラクターを作成しましたが、既定の (引数なし) コンストラクターは作成しませんでした。1 つの (任意の) コンストラクターを作成したため、コンパイラーはコンストラクターを生成できません。

デフォルトのコンストラクターを追加してみてください:

Sequence(){
    start = 0;
    stop = 0;
}

実際、私が見ているように、Sequence のベクトルもあります。Sequence クラスがさらに複雑になる場合は、間違いなくデフォルト コンストラクターが必要になり、おそらくコピー コンストラクターも必要になります。

于 2013-06-02T02:13:55.673 に答える