我有两个继承的类,一个是基类,包含多态,它是接口:
#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退出状态
有什么想法吗?
答案 0 :(得分:2)
构造函数Signal()
未实现。刚刚添加了它,它应该可以解决您的问题。
答案 1 :(得分:1)
链接器缺少Signal
类的默认构造函数的定义(主体)。
答案 2 :(得分:1)
源文件是在包含头文件时编译的。
因此,编译命令应该是:
g ++ Audio.cpp main.cpp
此外,您需要为Signal类提供默认构造函数的实现,这可以像
一样简单信号(){};
在Signal.h中。