gpt4 book ai didi

c++ - 分配抽象类类型错误的对象

转载 作者:IT老高 更新时间:2023-10-28 23:11:54 25 4
gpt4 key购买 nike

您好,我收到以下错误,我真的不确定为什么。

class InteSiVis: public ofBaseApp //{
, public ofxMidiListener{

当我让类 inresivis 从 ofxMidiListener 类继承时发生这种情况,并且在主源文件中出现以下错误

int main(){

ofSetupOpenGL(1920,1080, OF_WINDOW);            
ofRunApp( new InteSiVis()); // <-------- The error is here Allocating object of type abstract

}

这真的很令人困惑,因为我已经用另一个例子以确切的方式尝试过这个并且没有得到这个错误。

class testApp : public ofBaseApp, public ofxMidiListener {

int main(){
ofSetupOpenGL(640, 480, OF_WINDOW);
ofRunApp(new testApp());
}

您能否告诉我为什么会出现此错误?我以完全相同的方式调用类(class)。提前致谢。

///----------------------------------编辑InteSiVis.h

class InteSiVis: public ofBaseApp //{
, public ofxMidiListener{

public:
InteSiVis() ;

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

void keyPressed(int key);
void keyReleased(int key);

// Make an Array of Particle Systems
vector<FluidBodySim> mArrayFluidBodySim;

FluidBodySim mFluidBodySim ; ///< Simulation of fluid and rigid bodies

int mStatusWindow ; ///< Identifier for status window
unsigned mFrame ; ///< Frame counter
double mTimeNow ; ///< Current virtual time
int mMouseButtons[3] ; ///< Mouse buttons pressed
bool mInitialized ; ///< Whether this application has been initialized
int mScenario ; ///< Which scenario is being simulated now

// Scene stuff
ofEasyCam mEasyCam;
ofLight light;

// Setting Shader stuff
ofShader shader;
ofxPostProcessing post;

// Sound

float * lAudioOut; /* outputs */
float * rAudioOut;

float * lAudioIn; /* inputs */
float * rAudioIn;

int initialBufferSize; /* buffer size */
int sampleRate;

double wave,sample,outputs[2];

maxiSample piano_A1, piano_AS1, piano_B1, piano_C1, piano_CS1, piano_D1, piano_DS1, piano_E1, piano_F1, piano_FS1, piano_G1, piano_GS1;

vector<maxiPitchStretch<grainPlayerWin>*> stretches;

maxiPitchStretch<grainPlayerWin> *ts, *ts2, *ts3, *ts4, *ts5;

int nAverages;
float *ifftOutput;
int ifftSize;

// // Playing the Wav Files
void audioOut(float *output, int bufferSize, int nChannels);

double speed, grainLength, rate;

ofxMaxiFFT fft;
ofxMaxiFFTOctaveAnalyzer oct;
int current;
double pos;


} ;

testApp.h

class testApp : public ofBaseApp, public ofxMidiListener {

public:

void setup();
void draw();
void exit();

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();


stringstream text;

vector<ParticleSystem> ps;

//----------------------Sound---------------------------

void newMidiMessage(ofxMidiMessage& eventArgs);


ofxMidiIn midiIn;
ofxMidiOut midiOut;
ofxMidiMessage midiMessage;

void audioOut(float *output, int bufferSize, int nChannnels);

};

//----------------虚拟功能涡量分布.h

class IVorticityDistribution
{
public:
virtual Vec3 GetDomainSize( void ) const = 0 ;
virtual void AssignVorticity( Vec3 & vorticity , const Vec3 & position , const Vec3 & vCenter ) const = 0 ;
} ;

class JetRing : public IVorticityDistribution
{
public:
/*! \brief Initialize parameters for a vortex ring (using a different formula from the other).

The vorticity profile resulting from this is such that the induced velocity is in [0,1].

\param fRadiusSlug - radius of central region where velocity is constant

\param fThickness - thickness of vortex ring, i.e. radius of annular core

\param vDirection - vector of ring axis, also vector of propagation

\param fSpeed - speed of slug

*/
JetRing( const float & fRadiusSlug , const float & fThickness , const Vec3 & vDirection )
: mRadiusSlug( fRadiusSlug )
, mThickness( fThickness )
, mRadiusOuter( mRadiusSlug + mThickness )
, mDirection( vDirection )
{
}

virtual Vec3 GetDomainSize( void ) const
{
const float boxSideLength = 2.f * ( mRadiusOuter ) ; // length of side of virtual cube
return Vec3( 1.0f , 1.0f , 1.0f ) * boxSideLength ;
}

virtual void AssignVorticity( Vec3 & vorticity , const Vec3 & position , const Vec3 & vCenter ) const
{

} ;

最佳答案

事情就是这样运作的:

class Base
{
public:
const std::string SayHi() { return "Hi"; } // a normal non-virtual method
virtual std::string GetName() { return ("Base"); } // a normal virtual method
virtual int GetValue() = 0; // a pure virtual method
};

当你像这样声明 testApp class testApp : public Base { ... };:

normal non-virtual methods are inherited as they are declared inside Base, and are immutable.

normal virtual methods are inherited as they are declared inside Base, you can use them >as they already are declared, or redefine them to fit a particular purpose.

pure virtual methods are not defined, the parent class only say "if you inherit from me you HAVE TO implement those by yourself, strictly matching my prototype (How I defined them)

如果你不遵守这些规则,你会得到错误。


现在,您必须确保 ofBaseApp 内部没有纯虚方法,也没有未实现到子类中的 ofxMidiListener

由于您声明该类 testApp 没有任何错误,因此您必须在 InteSiVis 中有一个来自您忘记实现的父类的纯虚方法。

关于c++ - 分配抽象类类型错误的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24424996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com