[解決済み] 抽象クラス型のオブジェクトの割り当てエラー
質問
以下のようなエラーが発生し、原因がよくわかりません。
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());
}
全く同じようにクラスを呼び出しているのに、なぜこのようなエラーが発生するのか、おわかりになりますか?ありがとうございました。
///----------------------------------Edit 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);
};
//----------------VIRTUAL FUNCTION 渦度分布.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 { ... };
:
通常の非仮想的な方法 はBase内部で宣言されているため継承され、イミュータブルである。
通常の仮想メソッド はBase内部で宣言されたものがそのまま継承されるので、 >すでに宣言されているものをそのまま使うこともできますし、特定の目的に合わせて再定義することもできます。
純粋仮想メソッド が定義されていない場合、親クラスは「もしあなたが私から継承するなら、私のプロトタイプ(私がどのように定義したか)に厳密に一致させて、自分でそれらを実装しなければならない」と言うだけです。
そのルールに従わないと、エラーになるんだ。
の中に純粋な仮想メソッドが存在しないことを確認する必要があります。 ofBaseApp どちらも {のようなものです。 ofxMidiListener 子クラスに実装されていないもの。
という記載があるので、クラス テストアップ {を使用します。 はエラーを発生させないので、純粋な仮想メソッドを InteSiVis を、実装し忘れた親クラスから取得します。
関連
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です
-
[解決済み] インターフェースと抽象クラスの違いは何ですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] インターフェースと抽象クラス(一般的なOO)
-
[解決済み] 抽象クラスはコンストラクタを持つことができますか?
-
[解決済み] なぜJavaでは静的メソッドを抽象化できないのですか?
-
[解決済み] Pythonにおける抽象クラスとインターフェースの違い
-
[解決済み] Objective-Cで抽象クラスを作成する
-
[解決済み] 抽象クラスの代わりにインターフェイスを使用する場合とその逆は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】LLVMで暗黙のうちに削除されたコピーコンストラクタの呼び出し
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】「Expected '(' for function-style cast or type construction」エラーの意味とは?
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み】システムが指定されたファイルを見つけられませんでした。