我是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
变量。由于某些原因,序列的矢量很好。根据{{3}} openFrameworks教程,我似乎正在做正确的事情。
答案 0 :(得分:5)
您的parameritized构造函数Sequence(long, long)
会覆盖编译器生成的默认构造函数,从而隐式删除testApp
的默认构造函数。在你的行上:
Sequence currentSeq;
这会禁止testApp
的默认构造,因为currentSeq
没有可行的构造函数,因此错误。要解决此问题,请为Sequence
类应用默认构造函数(还应将start
和stop
成员初始化为0):
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)
{ }
// ...
};
答案 1 :(得分:2)
您已为Sequence创建了一个参数构造函数,但不是默认(无参数)构造函数。因为您创建了一个(任何)构造函数,所以编译器无法为您生成一个。
尝试添加默认构造函数:
Sequence(){
start = 0;
stop = 0;
}
实际上,当我看到它时,你也有一个序列向量。如果你的Sequence类变得更复杂,你肯定需要一个默认的构造函数,也可能需要一个复制构造函数。