Неопределенные символы?

У меня есть два класса с наследованием в минуту, один является базовым классом и содержит полиморфизм, это интерфейс:

#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:
«Сигнал :: Сигнал ()», на который ссылаются:
Audio :: Audio () в ccdjMubM.o
Audio :: Audio () в ccdjMubM.o
ld: символы не найдены для архитектуры x86_64
collect2: ld вернул 1 статус выхода

Есть идеи?

2

Решение

Конструктор Signal() не был реализован. Только что добавил, и это должно решить вашу проблему.

2

Другие решения

В компоновщике отсутствует определение (тело) конструктора по умолчанию для Signal учебный класс.

1

Исходные файлы предназначены для компиляции, а заголовочные файлы должны быть включены.

Итак, команда компиляции должна быть:

g ++ Audio.cpp main.cpp

Кроме того, вам нужно предоставить реализацию для стандартного конструктора для класса Signal, который может быть таким простым, как

Сигнал(){};

в Signal.h.

1
По вопросам рекламы [email protected]