我從我的C++編譯器得到一個奇怪的響應。我在網上搜索,但什麼也沒有有用或有益想出了......沒有匹配函數調用「標準構造函數」
編譯器響應:
floating.hpp|line 29|warning: `class HexFloatingPoint' has virtual functions but non-virtual destructor
In constructor `HexFloatingPoint::HexFloatingPoint(int, int)':
floating.cpp|line 5|error: no matching function for call to `FloatingPoint::FloatingPoint()'
floating.hpp|line 16|note: candidates are: FloatingPoint::FloatingPoint(const FloatingPoint&)
floating.cpp|line 3|note: FloatingPoint::FloatingPoint(int, int)
這些代碼文件:
的main.cpp
#include <iostream>
#include "floating.hpp"
using namespace std;
int main(int argc, char* argv[])
{
return 0;
}
floating.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
floating.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();在floating.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){}
固定的第一個問題
非常感謝球員!
更改構造器 'HexFloatingPoint :: HexFloatingPoint(INT sign_length,INT exp_length):浮點(sign_length,exp_length){}' 編譯說沒有.. 。 floating.o ||在函數中'_ZNSt12_Vector_baseIP8HexDigitSaIS1_EED2Ev':| stl_vector.h :(。text + 0x8)||未定義的引用'vtable for FloatingPoint'| floating.o ||在函數中'_ZN13FloatingPointC1Eii':| floating.cpp | 3 |未定義的引用'vtable for FloatingPoint'|' – user2000878
@ user2000878:確保爲類中的所有'virtual'方法提供了定義,包括'virtual'析構函數。 –
這夠了嗎? virtual〜HexFloatingPoint();在floating.hpp – user2000878