Я пытаюсь создать обобщенный c узел, используя zmq, который будет формировать динамический граф вычислений c, однако я получаю ошибку в прямом объявлении сокетов zmq в моем классе. Интересно, кто-нибудь может пролить свет на это? Сокращенная версия класса:
node.hpp
/*
* node.hpp
*/
#ifndef NODE_
#define NODE_
#include <iostream>
#include "zmq.hpp"
class Node
{
private:
std::string name_;
std::ostream& log_;
zmq::context_t context_;
zmq::socket_t subscriber_;
zmq::socket_t publisher_;
public:
Node(std::ostream& log, std::string name);
void sendlog(std::string msg);
};
#endif // NODE_
node. cpp
/*
* node.cpp
*/
#include <iostream>
#include <string>
#include "zmq.hpp"
#include "node.hpp"
Node::Node(std::ostream& log, std::string name):
log_(log),
name_(name)
{
sendlog(std::string("initialising ") + name_);
zmq::context_t context_(1);
zmq::socket_t subscriber_(context_, zmq::socket_type::sub);
zmq::socket_t publisher_(context_, zmq::socket_type::pub);
subscriber_.connect("ipc:///tmp/out.ipc");
publisher_.connect("ipc:///tmp/in.ipc");
sendlog(std::string("finished initialisation"));
}
void Node::sendlog(std::string msg)
{
this->log_ << msg << std::endl;
}
ошибка, которую я получаю от g ++
g++ main.cpp node.cpp -lzmq
node.cpp: In constructor ‘Node::Node(std::ostream&, std::__cxx11::string)’:
node.cpp:12:15: error: no matching function for call to ‘zmq::socket_t::socket_t()’
name_(name)
однако, когда я смотрю в zmq.hpp, я вижу
namespace zmq
{
class socket_t : public detail::socket_base
...
Я предполагаю, что делаю объявление неправильно каким-то образом? Я не очень хорошо разбираюсь в cpp, но использую это как проект, чтобы вернуться к нулю, поэтому приветствуются общие комментарии / ссылки на литературу.