Как я могу передать объект, который я написал, в конструктор другого класса? - PullRequest
2 голосов
/ 27 января 2020

Я реализую класс Duplicator, который позволит мне дублировать объекты Game. Мне нужно иметь возможность создать объект Game, идентичный тому, который у меня есть. Это существует в более широкой реализации настольной игры с несколькими другими классами, такими как Board и Space.

У меня есть два файла для класса Duplicator:

Duplicator.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

Дубликатор. 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>()
    ;

Ошибка, которую я продолжаю получать:

нет подходящего конструктора для инициализация «Game»

Класс игры содержится в двух файлах.

Game.h

#ifndef GAME_H
#define GAME_H

#include <Rcpp.h>

using namespace Rcpp;

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

#endif

Игра. cpp

#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 в классе Duplicator.

1 Ответ

2 голосов
/ 28 января 2020

Вам нужно переместить RCPP_EXPOSED_CLASS(...) в файл заголовка, по крайней мере, когда вы хотите использовать этот класс в качестве аргумента или типа возврата в других единицах компиляции. В противном случае компилятор не знает, что, например, Game может быть преобразовано в SEXP и наоборот.

...