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,因此出现错误。要解决此问题,请为您的类应用默认构造函数(您还应该将and成员Sequence初始化为 0):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 创建了一个单参数构造函数,但不是默认(无参数)构造函数。因为您已经创建了一个(任何)构造函数,所以编译器无法为您生成一个。

尝试添加一个默认构造函数:

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

实际上,在我看来,您也有一个序列向量。如果您的 Sequence 类变得更复杂,您肯定需要一个默认构造函数,并且可能还需要一个复制构造函数。

于 2013-06-02T02:13:55.673 回答