C++ 如何将我编写的对象传递给另一个类的构造函数?

C++ 如何将我编写的对象传递给另一个类的构造函数?,c++,rcpp,C++,Rcpp,我正在实现一个复制器类,它允许我复制游戏对象。我需要能够创建一个与我拥有的相同的游戏对象。这存在于棋盘游戏的一个更大的实现中,还有其他几个类,如board和Space 我有两个复制类文件: 复印机.h #ifndef DUPLICATOR_H #define DUPLICATOR_H #include <Rcpp.h> #include <stack> #include "Game.h" using namespace Rcpp; class Duplicator

我正在实现一个复制器类,它允许我复制游戏对象。我需要能够创建一个与我拥有的相同的游戏对象。这存在于棋盘游戏的一个更大的实现中,还有其他几个类,如board和Space

我有两个复制类文件:

复印机.h

#ifndef DUPLICATOR_H
#define DUPLICATOR_H

#include <Rcpp.h>
#include <stack>
#include "Game.h"

using namespace Rcpp;


class Duplicator {
private:
  Game gameObj = Game(5);
public:
  Duplicator(Game g);
  // Game genDuplicate();
};
#endif
#ifndef GAME_H
#define GAME_H

#include <Rcpp.h>

using namespace Rcpp;

class Game {
private:
  int id;
public:
  Game(int n);
};

#endif
\ifndef复印机
#定义复印机
#包括
#包括
#包括“Game.h”
使用名称空间Rcpp;
类复印机{
私人:
GameGameObj=游戏(5);
公众:
复印机(游戏g);
//Game gendoplicate();
};
#恩迪夫
复印机.cpp

#include <Rcpp.h>
#include <vector>
#include "Game.h"
#include "Duplicator.h"

using namespace Rcpp;




Duplicator::Duplicator(Game g){
  gameObj = g;
}



RCPP_EXPOSED_CLASS(Duplicator)
  RCPP_MODULE(duplicator_cpp) {

    class_<Duplicator>("Duplicator")
    .constructor<Game>()
    ;
#include <Rcpp.h>
#include "Game.h"

using namespace Rcpp;

Game::Game(int n){
  id = n;
}


RCPP_EXPOSED_CLASS(Game)
  RCPP_MODULE(game_cpp) {

    class_<Game>("Game")
    .constructor<int>()
    ;
  }
#包括
#包括
#包括“Game.h”
#包括“replicator.h”
使用名称空间Rcpp;
复印机:复印机(游戏g){
gameObj=g;
}
RCPP_外露_类(复印机)
RCPP_模块(复印机_cpp){
第二类(“复印机”)
.constructor()
;
我经常遇到的错误是:

没有用于“游戏”初始化的匹配构造函数

游戏类包含在两个文件中

Game.h

#ifndef DUPLICATOR_H
#define DUPLICATOR_H

#include <Rcpp.h>
#include <stack>
#include "Game.h"

using namespace Rcpp;


class Duplicator {
private:
  Game gameObj = Game(5);
public:
  Duplicator(Game g);
  // Game genDuplicate();
};
#endif
#ifndef GAME_H
#define GAME_H

#include <Rcpp.h>

using namespace Rcpp;

class Game {
private:
  int id;
public:
  Game(int n);
};

#endif
\ifndef游戏
#定义游戏
#包括
使用名称空间Rcpp;
班级游戏{
私人:
int-id;
公众:
游戏(INTN);
};
#恩迪夫
Game.cpp

#include <Rcpp.h>
#include <vector>
#include "Game.h"
#include "Duplicator.h"

using namespace Rcpp;




Duplicator::Duplicator(Game g){
  gameObj = g;
}



RCPP_EXPOSED_CLASS(Duplicator)
  RCPP_MODULE(duplicator_cpp) {

    class_<Duplicator>("Duplicator")
    .constructor<Game>()
    ;
#include <Rcpp.h>
#include "Game.h"

using namespace Rcpp;

Game::Game(int n){
  id = n;
}


RCPP_EXPOSED_CLASS(Game)
  RCPP_MODULE(game_cpp) {

    class_<Game>("Game")
    .constructor<int>()
    ;
  }
#包括
#包括“Game.h”
使用名称空间Rcpp;
游戏::游戏(int n){
id=n;
}
RCPP_暴露_类(游戏)
RCPP_模块(游戏_cpp){
类(“游戏”)
.constructor()
;
}

我不太确定我需要做什么。似乎我需要为replicator类中的游戏提供一个构造函数。

您必须移动
RCPP\u EXPOSED\u类(…)
到头文件,至少当您希望在其他编译单元中将该类用作参数或返回类型时是这样。否则编译器不知道例如
Game
可以转换为
SEXP
,反之亦然。

很可能
Game
有一个已删除的副本构造函数,原因如下:不幸的是,因为C++的问题不能满足A的要求,正如在本文中所解释的,这最多是猜测,没有人能在你的问题之前给出一个明确的答案,以便它满足所有的要求。n以复制此错误的游戏类为例。似乎为游戏类(例如Game(const Game©Me))编写副本构造函数可以解决问题,并删除复制器类的新副本,因为您可以通过例如Game newObj(oldObj)复制游戏对象;如果没有Rcpp部分,您的代码片段似乎正在做您所期望的事情:@JeremyFriesner默认的copy-ctor不是如预期的那样工作吗?这是在R包的上下文中吗?