C++/Djinni错误字段类型是一个抽象类



我正在React native中制作一个应用程序,它使用dropbox中的Djinni在C++和Javascript之间架起桥梁。从Javascript到C++的调用效果很好,但现在我正在实现从C++到Java/OjC的调用,我的C++技能很一般。所以我一直在初始化类方法。我以Djinni提供的例子为基础。AnotherClassMain是从Javascript到C++的访问点。

我想从另一个ClassMain中的processAImpl调用runAProcess方法。

但我弄错了字段类型"aEdition::ProcessAImpl"是一个抽象类在线进程AImpl进程A;在另一个ClassMain.hpp 中

我如何访问它?启动类processAImpl并从另一个ClassMain调用runAProcess??

//processA.hpp由djinni 创建

#pragma once
#include <string>
namespace aEditing {
class ProcessA {
public:
virtual ~ProcessA() {}
virtual bool runThisProcess(const std::string & str) = 0;
};
} 

//processAImpl.hpp

#pragma once
#include "processA.hpp"
namespace aEditing {
class ProcessAImpl : public ProcessA {
public:
ProcessAImpl(const std::shared_ptr<ProcessA> & listener);
void runAProcess(const std::string aCommand);
private:
std::shared_ptr<ProcessA> aProcess;
};
}

//processAImpl.cpp

#include "procesAImpl.hpp"
namespace aEditing {
ProcessAImpl::ProcessAImpl (const std::shared_ptr<ProcessA> & listener) {
this->aProcess = listener;
}
void ProcessAImpl::runAProcess(const std::string aCommand) {
this->aProcess->runThisProcess(aCommand);
}
}

//另一个ClassMain.hpp

#pragma once
#include "includes.hpp"
#include "processAImpl.hpp"
namespace anotherProcessing {
class AnotherProcessingMain: public anotherProcessing::AnotherProcessing {
public:
AnotherProcessingMain();
string anotherProcessing(const std::string &Input, const std::string &output) override;
private:
ProcesAImpl  processA;
};
}

//另一类主.cpp

#include "anotherClassMain.hpp"
namespace anotherProcessing {
shared_ptr<AnotherProcessing> AnotherProcessing::create() {
return make_shared<AnotherProcessingMain>();
}
AnotherProcessingMain::AnotherProcessingMain() {}
string AnotherProcessingMain::anotherProcessing(const std::string &Input, const std::string &output){
processA.runAProcess("testCommand");  //Trying to access this!
return "yeah";
}

我如何访问它?初始化类processAImpl并从另一个ClassMain调用runAProcess??

我想您的意思是实例化processAImpl
ProcessA是一个抽象类,因为它包含一个pure virtual函数
从抽象类派生时,必须在派生类中实现pure virtual函数。否则,您将无法实例化派生类。

因此,在派生类processAImpl中实现(提供其定义(runThisProcess(const std::string & str)

您缺少基类纯虚拟方法bool runThisProcess(const std::string &)的声明。你的意思是让void ProcessAImpl::runAProcess(const string)实现吗?

名称和参数类型必须完全匹配

  • runThisProcessrunAProcess
  • const std::string &const string

您应该将打算重写基类方法的子类中的方法标记为override(如果可以有子类(或final(如果不能(,这样编译器就可以更好地通知您类似的拼写错误

您还缺少AnotherProcessingMain::processA的初始化。你需要像这样的东西

AnotherProcessingMain::AnotherProcessingMain()
: processA(/* a const std::shared_ptr<ProcessA> & from somewhere */) 
{}

因为您定义的CCD_ 18的唯一构造函数采用CCD_。

非常可疑您有ProcessAImplstd::shared_ptr<ProcessA>成员。需要有一个在其runThisProcess成员中实际执行的类,它可能应该是ProcessAImpl。按照目前的情况,ProcessAImpl什么也不做。你基本上一直都有乌龟。

相关内容

  • 没有找到相关文章