2

私はその瞬間に継承を持つ2つのクラスを持っています。1つは基本クラスであり、ポリモーフィズムを含みます。これはインターフェースです。

#include <vector>
#ifndef _Signal_h
#define _Signal_h
using namespace std;

typedef vector<double> DIMENTIONS_2;

class Signal {

public:

    Signal();
    Signal(const int N, const int M)
    {
        this->width = N;
        this->height = M;
    };

    virtual vector<DIMENTIONS_2> splitSignal(vector<double> &theData) const = 0;
    virtual vector<DIMENTIONS_2> filterSignal(vector<DIMENTIONS_2>&blocks) const = 0;
    virtual vector<double> returnRawSignal() const = 0;

    virtual int zerocross() const = 0;
    virtual double energy() const = 0;
    virtual int zerocrossmap() = 0;
    virtual bool readSignal() const = 0;

protected:

    vector<double> rawSignal;
    int width;
    int height;
};

#endif

そして、これを継承して実装するクラスの1つ:

#include "Signal.h"

#ifndef _Audio_h
#define _Audio_h

typedef vector<double> DIMENTIONS_2;

class Audio : public Signal {

  public:

     Audio();
     Audio(const int N, const int M);

     vector<DIMENTIONS_2> splitSignal(vector<double>&data, int N, int M);
     vector<DIMENTIONS_2> filter(vector<DIMENTIONS_2> &data, double sumthres, double zerothres);

     double energy(vector<double> &blocks);

     int zerocross(vector<double> &block);

     int zerocrossmap(vector<double> &strippedData);

     template<typename T>
     int sign(T n);
 };


 #endif

Audioクラスには実装(.cpp)がありますが、これを使用してコンパイルしようとすると、次のようになります。

g++ Signal.h Audio.h Audio.cpp main.cpp 

次のエラーが発生します。

アーキテクチャx86_64の未定義のシンボル: "Signal :: Signal()"、参照元:ccdjMubM.oのAudio :: Audio()ccdjMubM.oのAudio :: Audio()ld:アーキテクチャx86_64のシンボルが見つかりませんcollect2 :ldが1つの終了ステータスを返しました

何か案は?

4

3 に答える 3

2

コンストラクターSignal()は実装されていません。それを追加するだけで、問題が解決するはずです。

于 2012-11-19T18:25:55.840 に答える
1

Signalリンカには、クラスのデフォルトコンストラクタの定義(本体)がありません。

于 2012-11-19T18:20:16.273 に答える
1

ソースファイルはコンパイルされることを意図しており、ヘッダーファイルはインクルードされることを意図しています。

したがって、コンパイルコマンドは次のようになります。

g ++ Audio.cpp main.cpp

さらに、Signalクラスのデフォルトのコンストラクターの実装を提供する必要があります。これは、次のように単純にすることができます。

信号(){};

Signal.hで。

于 2012-11-19T18:24:55.467 に答える