C++コンパイラから奇妙な応答が返ってきます。私はインターネットを検索しましたが、何も役に立ちませんでした...
コンパイラの応答:
float.hpp | line 29 |警告: `class HexFloatingPoint'には仮想関数がありますが、非仮想デストラクタです
コンストラクターでは`HexFloatingPoint:: HexFloatingPoint(int、int)':
float.cpp | line 5 | error: `FloatingPoint :: FloatingPoint()'を呼び出すための一致する関数がありません
float.hpp | line 16 |注:候補は次のとおりです:FloatingPoint :: FloatingPoint(const FloatingPoint&)
float.cpp | line 3 |注:FloatingPoint :: FloatingPoint(int、int)
これらはコードファイルです:
main.cpp
#include <iostream>
#include "floating.hpp"
using namespace std;
int main(int argc, char* argv[])
{
return 0;
}
float.hpp
#ifndef FLOATING
#define FLOATING
#include <string>
#include <vector>
using namespace std;
class FloatingPoint;
class HexFloatingPoint;
class HexDigit;
class HexDigitBool;
class HexDigitChar;
class FloatingPoint
{
private:
int significant_length;
int exponent_length;
public:
FloatingPoint(int sign_length,int exp_length);
virtual void set_significant(string number) = 0;
virtual void set_exponent(string number);
virtual void print();
};
class HexFloatingPoint : public FloatingPoint
{
private:
vector<HexDigit*> significant_length;
vector<HexDigit*> exponent_length;
public:
HexFloatingPoint(int sign_length,int exp_length);
void set_significant(string number);
void set_exponent(string number);
void print();
~HexFloatingPoint();
};
class HexDigit
{
public:
virtual void print()=0;
virtual void set_value(char c);
virtual int get_value();
};
class HexDigitBool : public HexDigit
{
private:
bool b[4];
public:
void print();
virtual void set_value(char c);
virtual int get_value();
};
class HexDigitChar : public HexDigit
{
private:
char c;
public:
void print();
virtual void set_value(char c);
virtual int get_value();
};
#endif
float.cpp
#include "floating.hpp"
FloatingPoint::FloatingPoint(int sign_length,int exp_length) : significant_length(sign_length),exponent_length(exp_length){}
HexFloatingPoint::HexFloatingPoint(int sign_length,int exp_length) : significant_length(sign_length),exponent_length(exp_length){}
void HexFloatingPoint::set_significant(string number){}
void HexFloatingPoint::set_exponent(string number){}
void HexFloatingPoint::print(){}
HexFloatingPoint::~HexFloatingPoint(){}
あなたが私を助けてくれることを願っています。私はすでにFloatingPoint();を追加しようとしました。float.hppとfloating.cppにありますが、役に立ちませんでした。
更新1
コンストラクターをに変更
HexFloatingPoint::HexFloatingPoint(int sign_length,int exp_length) : FloatingPoint(sign_length,exp_length){}
コンパイラはノーと言った...
floating.o||In function `_ZNSt12_Vector_baseIP8HexDigitSaIS1_EED2Ev':|
stl_vector.h:(.text+0x8)||undefined reference to `vtable for FloatingPoint'|
floating.o||In function `_ZN13FloatingPointC1Eii':|
floating.cpp|3|undefined reference to `vtable for FloatingPoint'|'
更新2
変化
class FloatingPoint
{
private:
int significant_length;
int exponent_length;
public:
FloatingPoint(int sign_length,int exp_length);
virtual void set_significant(string number) = 0;
virtual void set_exponent(string number);
virtual void print();
};
に
class FloatingPoint
{
private:
int significant_length;
int exponent_length;
public:
FloatingPoint(int sign_length,int exp_length);
virtual void set_significant(string number) = 0;
virtual void set_exponent(string number) = 0;
virtual void print() = 0;
};
アップデート1で発生したエラーを解決しました
変化
class HexFloatingPoint : public FloatingPoint
{
private:
vector<HexDigit*> significant_length;
vector<HexDigit*> exponent_length;
public:
HexFloatingPoint(int sign_length,int exp_length);
void set_significant(string number);
void set_exponent(string number);
void print();
~HexFloatingPoint();
};
に
class HexFloatingPoint : public FloatingPoint
{
private:
vector<HexDigit*> significant_length;
vector<HexDigit*> exponent_length;
public:
HexFloatingPoint(int sign_length,int exp_length);
void set_significant(string number);
void set_exponent(string number);
void print();
virtual ~HexFloatingPoint();
};
警告を解決しました
変化
HexFloatingPoint::HexFloatingPoint(int sign_length,int exp_length) : significant_length(sign_length),exponent_length(exp_length){}
に
HexFloatingPoint::HexFloatingPoint(int sign_length,int exp_length) : FloatingPoint(sign_length,exp_length),significant_length(sign_length),exponent_length(exp_length){}
最初の問題を修正
どうもありがとう!