如何解决在范围内实例化基类并在范围外调用不起作用
我遇到以下主要功能的分段错误问题。 “ 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 举报,一经查实,本站将立刻删除。