微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在范围内实例化基类并在范围外调用不起作用

如何解决在范围内实例化基类并在范围外调用不起作用

我遇到以下主要功能的分段错误问题。 “ base”是基类的实例,“ baSEOne”是派生类的实例。当我在范围内调用import 'dart:convert'; GraphQLClient _client = graphQLConfiguration.clientToQuery(); QueryResult result = await _client.query( QueryOptions( documentNode: gql(GraphQlQueries.authenticateUser()),) ); print(jsonEncode(result.data)); 时,该函数正常工作,但是当我在范围外调用时,出现了分段错误。如何使base->foo()在范围之外工作?

base->foo()

main.cpp

另一方面,即使不适合我的程序,下面的代码也可以工作。

#include "Handler.hpp"
#include "Derived.hpp"

using namespace std;
int main(){
    Base* base;
    {
        Derived_factory factoryOne("Derived.so");
        std::unique_ptr<Base> baSEOne = factoryOne.create();
        Base* b;
        b = baSEOne.release();
        base=b;
        base->foo();
    }
    base->foo();
    return 0;
}

其余代码在下面。

#include "Handler.hpp" #include "Derived.hpp" using namespace std; int main(){ Base* base; { Base* b = new Derived(); base=b; base->foo(); } base->foo(); return 0; }

base.hpp

class Base { public: virtual ~Base() {} virtual void foo() = 0; }; using Base_creator_t = Base *(*)();

derived.hpp

#include "Base.hpp" class A{ public: int k; void printsomething(){ std::cout<<"class A "<<k<<std::endl; }; }; class Derived: public Base { public: A a; void virtual foo(){ std::cout<<"Hello Foo! Derived Class"<<std::endl; returnA(); }; void printA(){ a.k = 10; a.printsomething(); }; }; extern "C" { Base * create() { return new Derived; } }

handler.hpp

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。