未定义的符号?

时间:2012-11-19 18:17:02

标签: c++ compiler-errors g++ linker-errors undefined-reference

我有两个继承的类,一个是基类,包含多态,它是接口:

#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

其中一个继承并实现的类:

#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退出状态

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

构造函数Signal()未实现。刚刚添加了它,它应该可以解决您的问题。

答案 1 :(得分:1)

链接器缺少Signal类的默认构造函数的定义(主体)。

答案 2 :(得分:1)

源文件是在包含头文件时编译的。

因此,编译命令应该是:

g ++ Audio.cpp main.cpp

此外,您需要为Signal类提供默认构造函数的实现,这可以像

一样简单

信号(){};

在Signal.h中