Я пытаюсь написать модель для системы, используя SystemC (библиотека C++ для системного моделирования). Мой проект состоит из трех основных частей: a Server
, a Environment
, People
объектов и Robots
. Окружающей среде и серверу необходим доступ ко всем роботам в системе. Моя первоначальная идея состояла в том, чтобы сохранить вектор Robot
объектов как в Server
, так и в объектах Environment
(которые будут переданы в конструкторы каждого). Однако для класса vector требуется, чтобы объект имел конструктор по умолчанию. По характеру SystemC «модули» не имеют конструкторов по умолчанию, так как каждый модуль должен иметь имя. Кроме того, мне нужно передать в вектор Robot
. Общим решением для этого является использование вектора указателей, а затем инициализация вектора из конструктора, как показано на рисунке here. Однако модули Robot
также должны принимать дополнительные параметры в своих конструкторах. Так что я не могу разыграть этот трюк. Я был бы признателен, если бы кто-нибудь мог предложить мне решение этой дилеммы.Работать вокруг для требования конструктора по умолчанию для вектора?
Для краткости я только отправлю код для Server
и Robot
, так как все модули страдают от одной и той же проблемы; если я могу зафиксировать его в одном месте, остальные должны следовать.
server.h
#ifndef SERVER_H_
#define SERVER_H_
#include <vector>
#include <systemc.h>
#include "Person.h"
#include "Robot.h"
SC_MODULE (Server)
{
public:
sc_in<bool> clk;
SC_HAS_PROCESS(Server);
Server(sc_module_name name_, std::vector<Robot> robots);
void prc_server();
};
#endif /* SERVER_H_ */
server.cpp
#include "Server.h"
Server::Server(sc_module_name name_, std::vector<Robot> robots) : sc_module(name_)
{
SC_METHOD(prc_server);
sensitive << clk.pos();
}
void Server::prc_server()
{
}
robot.h
#ifndef ROBOT_H_
#define ROBOT_H_
#include <vector>
#include <systemc.h>
#define ROBOT_SPEED 0.1
SC_MODULE (Robot)
{
private:
std::vector<unsigned> path;
public:
sc_in<bool> clk; // system clock
sc_in<bool> canMove; // true = safe to move
sc_in<unsigned> position; // current position
sc_out<bool> arrived; // true = arrived at next position
SC_HAS_PROCESS(Robot);
Robot(sc_module_name name_, std::vector<unsigned> path);
void prc_robot();
};
#endif /* ROBOT_H_ */
robot.cpp
#include "Robot.h"
Robot::Robot(sc_module_name name_, std::vector<unsigned> path) : sc_module(name_)
{
this->path = path;
SC_METHOD(prc_robot);
sensitive<<clk.pos();
}
void Robot::prc_robot()
{
}
Here's the compiler output (я положил его на Pastebin, потому что опустошили количество символов)
Я уверен, что вектор не требует конструктора по умолчанию, если вы не используете определенные элементы. –
Ваш код отлично работает на моей машине: http://coliru.stacked-crooked.com/a/df9bf0d388dda1a8 Пожалуйста, прочтите эту страницу, а затем отредактируйте вопрос: http://stackoverflow.com/help/mcve –
@MooingDuck Interesting; он не будет компилироваться здесь (я использую C++ 11). Это дает мне ошибку «в этом контексте» в начале конструктора «Робот». – audiFanatic