Zuerst bin ich kein Experte C++ - Programmierung und meine Frage könnte sehr elementar sein.Wie erstellt man einen seriellen Port mit boost :: asio und shared_ptr
Ich versuche Boost Asio zu verwenden, um auf serielle Schnittstelle zuzugreifen und shared_ptr zu verwenden, um Speicherverlust zu verhindern. Ich habe einige Beispielcodes durchsucht, aber für mich funktionieren einfach viele nicht.
mein Code ist wie folgt:
SerialPortConnection.cpp:
#include "SerialPortConnection.h"
SerialPortConnection::SerialPortConnection(std::string port_name_init, int baud_rate_init,
boost::asio::serial_port_base::character_size charSize_init,
boost::asio::serial_port_base::stop_bits stopBit_init,
boost::asio::serial_port_base::parity pariy_init,
boost::asio::serial_port_base::flow_control flowControl_init) :
port_name(port_name_init),
baud_rate(baud_rate_init),
charSize(charSize_init),
stopBit(stopBit_init),
pariy(pariy_init),
flowControl(flowControl_init)
{
port = boost::shared_ptr<serial_port_ptr>(new boost::asio::serial_port);
}
SerialPortConnection::~SerialPortConnection()
{
//dtor
}
SerialPortConnection.h:
#ifndef SERIALPORTCONNECTION_H
#define SERIALPORTCONNECTION_H
#include <iostream>
#include <string>
#include <memory>
#include <boost/asio.hpp>
#include <boost/asio/serial_port.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/make_shared.hpp>
//using namespace::boost::asio;
class SerialPortConnection
{
public:
SerialPortConnection(std::string port_name_init, int baud_rate_init,
boost::asio::serial_port_base::character_size charSize000_init,
boost::asio::serial_port_base::stop_bits stopBit000_init,
boost::asio::serial_port_base::parity pariy000_init,
boost::asio::serial_port_base::flow_control flowControl_init);
virtual ~SerialPortConnection();
private:
std::string port_name;
int baud_rate;
boost::asio::serial_port_base::character_size charSize;
boost::asio::serial_port_base::stop_bits stopBit;
boost::asio::serial_port_base::parity pariy;
boost::asio::serial_port_base::flow_control flowControl;
boost::asio::io_service io;
typedef boost::asio::serial_port* serial_port_ptr;
boost::shared_ptr <serial_port_ptr> port;
};
#endif // SERIALPORTCONNECTION_H
Compilerfehler erzeugt kompilieren:
||=== Build: Debug in test-1 (compiler: GNU GCC Compiler) ===|
/home/mkh/cb-codes/test-prjs/test-1/src/SerialPortConnection.cpp||In constructor ‘SerialPortConnection::SerialPortConnection(std::__cxx11::string, int, boost::asio::serial_port_base::character_size, boost::asio::serial_port_base::stop_bits, boost::asio::serial_port_base::parity, boost::asio::serial_port_base::flow_control)’:|
/home/mkh/cb-codes/test-prjs/test-1/src/SerialPortConnection.cpp|17|error: no matching function for call to ‘boost::asio::basic_serial_port<>::basic_serial_port()’|
/usr/include/boost/asio/basic_serial_port.hpp|147|note: candidate: boost::asio::basic_serial_port<SerialPortService>::basic_serial_port(boost::asio::basic_serial_port<SerialPortService>&&) [with SerialPortService = boost::asio::serial_port_service]|
/usr/include/boost/asio/basic_serial_port.hpp|147|note: candidate expects 1 argument, 0 provided|
/usr/include/boost/asio/basic_serial_port.hpp|126|note: candidate: boost::asio::basic_serial_port<SerialPortService>::basic_serial_port(boost::asio::io_service&, const native_handle_type&) [with SerialPortService = boost::asio::serial_port_service; boost::asio::basic_serial_port<SerialPortService>::native_handle_type = int]|
/usr/include/boost/asio/basic_serial_port.hpp|126|note: candidate expects 2 arguments, 0 provided|
/usr/include/boost/asio/basic_serial_port.hpp|105|note: candidate: boost::asio::basic_serial_port<SerialPortService>::basic_serial_port(boost::asio::io_service&, const string&) [with SerialPortService = boost::asio::serial_port_service; std::__cxx11::string = std::__cxx11::basic_string<char>]|
/usr/include/boost/asio/basic_serial_port.hpp|105|note: candidate expects 2 arguments, 0 provided|
/usr/include/boost/asio/basic_serial_port.hpp|85|note: candidate: boost::asio::basic_serial_port<SerialPortService>::basic_serial_port(boost::asio::io_service&, const char*) [with SerialPortService = boost::asio::serial_port_service]|
/usr/include/boost/asio/basic_serial_port.hpp|85|note: candidate expects 2 arguments, 0 provided|
/usr/include/boost/asio/basic_serial_port.hpp|69|note: candidate: boost::asio::basic_serial_port<SerialPortService>::basic_serial_port(boost::asio::io_service&) [with SerialPortService = boost::asio::serial_port_service]|
/usr/include/boost/asio/basic_serial_port.hpp|69|note: candidate expects 1 argument, 0 provided|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|
Ich habe verschiedene Lösungen ausprobiert. zum Beispiel habe ich dieses zu SerialPortConnection.h hinzugefügt:
boost :: asio :: serial_port port0;
aber es funktioniert auch nicht. Es führt tatsächlich zu einem anderen Kompilierungsfehler. Jetzt muss ich wissen, wie man eine serielle Schnittstelle mit shared_ptr erstellt.
Vielen Dank,
Diese Lösung funktioniert sehr gut. Vielen Dank –