我正在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)
实现吗?
名称和参数类型必须完全匹配
runThisProcess
与runAProcess
const std::string &
与const string
您应该将打算重写基类方法的子类中的方法标记为override
(如果可以有子类(或final
(如果不能(,这样编译器就可以更好地通知您类似的拼写错误
您还缺少AnotherProcessingMain::processA
的初始化。你需要像这样的东西
AnotherProcessingMain::AnotherProcessingMain()
: processA(/* a const std::shared_ptr<ProcessA> & from somewhere */)
{}
因为您定义的CCD_ 18的唯一构造函数采用CCD_。
非常可疑您有ProcessAImpl
有std::shared_ptr<ProcessA>
成员。需要有一个在其runThisProcess
成员中实际执行的类,它可能应该是ProcessAImpl
。按照目前的情况,ProcessAImpl
什么也不做。你基本上一直都有乌龟。