【发布时间】:2012-11-07 17:20:47
【问题描述】:
我现在有两个继承的类,一个是基类,包含多态性,它是接口:
#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 个退出状态
有什么想法吗?
【问题讨论】:
-
或者你可以在类中内联实现它。
-
停止将
;放在函数定义的末尾! :) 编译器甚至可以在严格模式下给你一个警告。 -
其他人都没有提到过,它的拼写是“dimension”,除非有我找不到的区域拼写。
-
@Phorce:正确。但这是一个声明,我说的是“double foo() {};”中的定义,在这种情况下不需要
;。 -
@phasetwenty:这是福尔斯方言,你是纳粹语法! :)
标签: c++ compiler-errors g++ linker-errors undefined-reference