Rcppモジュールを使用してRにC++クラスを公開しようとしています。この動作の仕組みを理解するための簡単な例を作成しようとしました。私は自分のcppファイル、パッケージのsrcフォルダに格納されている2つのクラスBarとFooを持っています。 Bar.cppのコードは次のとおりです。Rcppモジュールを使用してC++クラスを公開する
#include "Bar.h"
#include "Foo.h"
#include <Rcpp.h>
using namespace Rcpp;
Bar::Bar(){x = 0;};
int Bar::getX(){return x;}
void Bar::setX(int num){x = num;}
int Bar::sumXY(){
Foo f = Foo();
f.setY(5);
return x + f.getY();
}
RCPP_MODULE(bar_mod){
class_<Bar>("Bar")
.constructor()
.method("getX", &Bar::getX)
.method("setX", &Bar::setX)
.method("sumXY", &Bar::sumXY)
;
}
このヘッダーファイルのコードは次のとおりです。
class Bar{
public:
Bar();
int getX();
void setX(int num);
int sumXY();
private:
int x;
};
Foo.cppのコードは次のとおりです。
#include "Foo.h"
#include <Rcpp.h>
using namespace Rcpp;
Foo::Foo(){
y = 0;
}
int Foo::getY(){return y;}
void Foo::setY(int num){y = num;}
RCPP_MODULE(foo_module){
class_<Foo>("Foo")
.constructor()
.method("getY", &Foo::getY)
.method("setY", &Foo::setY)
;
}
ヘッダーファイルのコードは次のとおりです。
class Foo{
public:
Foo();
int getY();
void setY(int num);
private:
int y;
};
Bar.cppファイルには、両方のヘッダーファイル(Bar.hとFoo.h)が含まれています。 BarのsetXY()メソッドは、Fooオブジェクトを作成し、そのメソッドを呼び出します(そのため、独自のファイル以外のクラスとメソッドを使用します)。
これらのクラスの両方からRでオブジェクトを作成し、それらのメソッドを呼びたいと思います。私は、次のコードを使用してRでこれらのモジュールをロードしようとしています:
require(Rcpp)
loadModule("foo_mod", TRUE)
loadModule("bar_mod", TRUE)
foo_mod <- Module("foo_mod")
bar_mod <- Module("bar_mod")
foo <- new (Foo)
bar <- new (Bar)
はしかし、私は次のエラーを取得する:私は間違って何を
Error in .getClassesFromCache(Class) : object 'Foo' not found
やっていますか?