Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 未定义的符号?_C++_Compiler Errors_G++_Linker Errors_Undefined Reference - Fatal编程技术网

C++ 未定义的符号?

C++ 未定义的符号?,c++,compiler-errors,g++,linker-errors,undefined-reference,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-&

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

#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
我得到以下错误:

架构x86_64的未定义符号: “信号::信号()”,引用自: ccdjMubM.o中的Audio::Audio() ccdjMubM.o中的Audio::Audio() ld:找不到架构x86_64的符号 collect2:ld返回了1个退出状态


有什么想法吗?

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

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

源文件要编译,而头文件要包含在内

因此,compile命令应该是:

g++Audio.cpp main.cpp

此外,还需要为Signal类的默认构造函数提供一个实现,该实现可以简单到

信号(){}


在Signal.h.

中,要编译源文件,而要包含头文件

因此,compile命令应该是:

g++Audio.cpp main.cpp

此外,还需要为Signal类的默认构造函数提供一个实现,该实现可以简单到

信号(){}


在Signal.h.

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

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

或者您可以在类中内联实现它。停止放置
在函数定义的末尾!:)编译器甚至可以在一个严格的模式下给你们一个警告。这让我很难受,其他人都没提到过,它的拼写是“dimension”,除非有我找不到的区域拼写。@Phorce:正确。但这是一个声明,我说的是“double foo(){};”中的定义,在这种情况下,
不是必需的。@phasetwenty:这是你说的福斯方言,你是纳粹分子!:)或者您可以在类中内联实现它在函数定义的末尾!:)编译器甚至可以在一个严格的模式下给你们一个警告。这让我很难受,其他人都没提到过,它的拼写是“dimension”,除非有我找不到的区域拼写。@Phorce:正确。但这是一个声明,我说的是“double foo(){};”中的定义,在这种情况下,
不是必需的。@phasetwenty:这是你说的福斯方言,你是纳粹分子!:)
#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
g++ Signal.h Audio.h Audio.cpp main.cpp