Boostasioを使用してシリアルポートを構成しています。しかし、なぜ以下のコードがエラーを出しているのですか?set_optionにコメントすると、正常に機能します。
以下のコードはエラーになります
serial_config.cpp:13:エラー:数値定数の前にunqualified-idが必要です/home/chirag/boost_install/include/boost/asio/serial_port_service.hpp:25、/home/chirag/boost_install/include/boost/からインクルードされたファイルasio / basic_serial_port.hpp:30、/ home / chirag / boost_install / include / boost / asio.hpp:25、serial_config.cpp:1から:/home/chirag/boost_install/include/boost/asio/detail/reactive_serial_port_service。 hpp:静的メンバー関数âstaticboost:: system :: error_code boost :: asio :: detail :: react_serial_port_service :: store_option(const void *、termios&、boost :: system :: error_code&)[with SettableSerialPortOption =int]â: /home/chirag/boost_install/include/boost/asio/detail/reactive_serial_port_service.hpp:126:âboost::system::からインスタンス化error_code boost :: asio :: detail :: react_serial_port_service :: set_option(boost :: asio :: detail :: react_descriptor_service :: Implementation_type&、const SettableSerialPortOption&、boost :: system :: error_code&)[with SettableSerialPortOption=int]â/home/ chirag / boost_install / include / boost / asio / serial_port_service.hpp:167:âboost:: system :: error_codeboost :: asio :: serial_port_service :: set_option(boost :: asio :: detail :: react_descriptor_service ::implementation_type&からインスタンス化const SettableSerialPortOption&、boost :: system :: error_code&)[with SettableSerialPortOption =int]â/home/chirag/boost_install/include/boost/asio/basic_serial_port.hpp:390:âvoidboost:: asio :: basic_serial_port::set_optionからインスタンス化(const SettableSerialPortOption&)[with SettableSerialPortOption = int、SerialPortService = boost :: asio :: serial_port_service]âserial_config.cpp:31:ここからインスタンス化/home/chirag/boost_install/include/boost/asio/detail/reactive_serial_port_service.hpp:194:エラー:â*のメンバーâstoreâのリクエスト(const int *)optionâ、これは非クラスタイプのâconstintâです
#include <boost/asio.hpp> // include boost
using namespace::boost::asio; // save tons of typing
#include <iostream>
using std::cin;
// These are the values our port needs to connect
#ifdef _WIN32
// windows uses com ports, this depends on what com port your cable is plugged in to.
const char *PORT = "COM3";
#else
// *nix com ports
const char *PORT = "dev/ttyS3";
#endif
// Note: all the following except BAUD are the exact same as the default values
// what baud rate do we communicate at
serial_port_base::baud_rate BAUD(19200);
// how big is each "packet" of data (default is 8 bits)
serial_port_base::character_size CSIZE( 8 );
// what flow control is used (default is none)
serial_port_base::flow_control FLOW( serial_port_base::flow_control::none );
// what parity is used (default is none)
serial_port_base::parity PARITY( serial_port_base::parity::none );
// how many stop bits are used (default is one)
serial_port_base::stop_bits STOP( serial_port_base::stop_bits::one );
int main()
{
// create the I/O service that talks to the serial device
io_service io;
// create the serial device, note it takes the io service and the port name
serial_port port( io, PORT );
// go through and set all the options as we need them
// all of them are listed, but the default values work for most cases
port.set_option( BAUD );
port.set_option( CSIZE );
port.set_option( FLOW );
port.set_option( PARITY );
port.set_option( STOP );
// buffer to store commands
// this device reads 8 bits, meaning an unsigned char, as instructions
// varies with the device, check the manual first
unsigned char command[1] = {0};
// read in user value to be sent to device
int input;
cin >> input;
// Simple loop, since the only good values are [0,255]
// break when a negative number is entered.
// The cast will convert too big numbers into range.
while( input >= 0 )
{
// convert our read in number into the target data type
command[0] = static_cast<unsigned char>( input );
// this is the command that sends the actual bits over the wire
// note it takes a stream and a asio::buffer
// the stream is our serial_port
// the buffer is constructed using our command buffer and
// the number of instructions to send
write( port, buffer( command, 1 ) );
// read in the next input value
cin >> input;
}
// all done sending commands
return 0;
}