0

我正在用 React-native 制作一个应用程序,它使用来自 Dropbox 的 Djinni 在 C++ 和 Javascript 之间架起桥梁。从 Javascript 到 C++ 的调用效果很好,但现在我正在实现从 C++ 到 Java/ObjC 的调用,我的 C++ 技能如此如此。所以我坚持初始化类方法。我基于 Djinni 提供的示例。AnotherClassMain 是从 Javascript 到 C++ 的访问点。

我想从 anotherClassMain 中的 processAImpl 调用 runAProcess 方法。

但我得到错误字段类型'aEditing :: ProcessAImpl'是一个抽象类在ProcesAImpl processA线上; 在另一个ClassMain.hpp

我怎样才能访问这个启动类 processAImpl 并从 anotherClassMain 调用 runAProcess ?

// djinni 创建的 processA.hpp

#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;
  };
}

//另一个ClassMain.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";
  }
4

2 回答 2

0

我怎样才能访问这个启动类processAImplrunAProcess从 anotherClassMain 调用?

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

runThisProcess(const std::string & str)所以在派生类中实现(提供定义)processAImpl

于 2018-12-06T10:33:39.620 回答
0

您缺少基类纯虚拟方法的声明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 */) 
{}

因为ProcessAImpl您定义的唯一构造函数需要一个const std::shared_ptr<ProcessA> &.

你有一个会员是非常可疑的。需要有一些类实际上在它的成员中做一些事情,它可能应该是. 就目前而言,什么都不做。基本上你一路上都有乌龟ProcessAImplstd::shared_ptr<ProcessA>runThisProcessProcessAImplProcessAImpl

于 2018-12-06T10:34:45.920 回答