Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.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++ 称为terminate的纯虚拟方法在没有活动异常的情况下调用。当函数执行此操作时,它将返回_C++_Abstract Class - Fatal编程技术网

C++ 称为terminate的纯虚拟方法在没有活动异常的情况下调用。当函数执行此操作时,它将返回

C++ 称为terminate的纯虚拟方法在没有活动异常的情况下调用。当函数执行此操作时,它将返回,c++,abstract-class,C++,Abstract Class,嗨,我正在做一个函数,以找到一个运输的号码,但我遇到了一个错误,我不知道为什么 我必须抽象基类“Transport” 此类继承自传输 class Transport { protected: int transportNumber; char transportName[20]; char company[20]; struct tm dateOfMaking; double speed; char propertyType[20]; ch

嗨,我正在做一个函数,以找到一个运输的号码,但我遇到了一个错误,我不知道为什么

我必须抽象基类“Transport”

此类继承自传输

class Transport
{
protected:
    int transportNumber;
    char transportName[20];
    char company[20];
    struct tm dateOfMaking;
    double speed;
    char propertyType[20];
    char transportType[20];

public:
    Transport();
    Transport(int,char*, char*, struct tm, double, char*, char*);
    ~Transport();

    virtual char* GetName() = 0;
    virtual bool Warning(double);
    virtual void Print() = 0;
    virtual void Save() = 0;
    virtual int GetPassengerNumber();
    virtual double GetEmptyWeight();
    char * GetTransportType() { return transportType; }
    int GetTransportNumber() { return transportNumber;}
};
class Aerial : public Transport
{
protected:
    int engineNumber;
    double length;
public:
    Aerial() {}
    Aerial(int, char*, char*, struct tm, double, char*, char*, int, double);
    ~Aerial();
};
我有一个继承自Aeror类的类

class PassengerPlane : public Aerial
{
private:
    int seatNumber;
    double Bagswieght;
public:
    PassengerPlane() {}
    PassengerPlane(int, char*, char*, struct tm, double, char*, char*, int, double, int,double);
    ~PassengerPlane();
    char* GetName();
    bool Warning(double);
    int GetPassengerNumber() { return seatNumber; }
    void Save();
    void Print();
};
使用ProgrammeManagement::TransperSearchByNumber(int TN)函数返回您在此函数中存储并搜索文件中对象的Transport*值,如下所示:

Transport* ProgrammeManagement::TransporSearchByNumber(int TN)
{
    char num;
    int x = 1;
    PassengerPlane e;
    Transport *T;
    fstream file(Type,ios::in);
    fstream fil(TransportFilePath,ios::in);
    while(file.get(num))
    {
        if( num == '1')
        {

            fil.read((char*)&e,sizeof(PassengerPlane));
            T = &e;
            if( TN == T->GetTransportNumber()){
            x = 0;
            return T;
            }
        }
    }

    if(x){
        cout << "Not found";
    }
    file.close();
    fil.close();
}
但是,当我在传输上调用Print()函数时,会出现以下错误(在运行时,它会编译):

对如何解决这个问题有任何帮助


提前非常感谢

transperSearchByNumber
中,返回指向局部变量
e
的指针。当函数返回
e
的生存期结束时,它将被销毁。指针将立即无效。您还需要确保所有代码路径都返回一个值。您也不能读取和写入这样的非平凡对象-您需要一个序列化方案。
fil.read((char*)&e,sizeof(PassengerPlane))在这里,您可以使用文件的某些内容覆盖内存,包括虚拟表-这肯定是一个问题启用编译器的警告并查看它们!
Transport*s;
  s = ProgrammeManagement::TransporSearchByNumber(2);
  s->Print();
pure virtual method called
terminate called without an active exception