MSVS2017,命名空间的 Boost C++ 错误
MSVS2017, Boost C++ error with namespaces
谁能帮帮我。我遇到了障碍。
我修改了项目属性以包括 Boost header 路径和 Boost 链接器路径——加上 'not using predefined header files' 选项'
不知为何,Visual studio 无法将 std_in/std_out 视为 boost::process 命名空间的一部分。
我在 Linux 上编译了相同的文件,并且工作正常。相同版本的 Boost 1.78.0.
namespace bp = ::boost::process;
bp::opstream chldInput;
bp::ipstream chldOutput;
bp::child c(cmd.c_str(), bp::std_out > chldInput, bp::std_in < chldOutput);
不是看不到bp::std_in
和bp::std_out
。因为你换了流
ipstream
是一个读取管道流的实现 - 您可以使用与 std::istream
s 类似的方式使用的流,例如 std::cin
.
opstream
是一个写管道流的实现——一个你可以像 std::ostream
s 一样使用的流,比如 std::cout
.
但是,bp::std_out
需要转到 bp::ipstream
(然后您可以从中读取)并且 bp::std_in
需要从 bp::opstream
(您可以写入).
示例:
bp::child c(cmd.c_str(), bp::std_out > chldOutput, bp::std_in < chldInput);
由于 chldInput
没有连接到任何东西,您可能想使用 stdin
代替:
bp::child c(cmd.c_str(), bp::std_out > chldOutput, bp::std_in < stdin);
您可能还想 c.wait()
命令完成。
像您一样交换流可能会产生类似
的错误
program.cpp: In function ‘int main()’:
program.cpp: error: no match for ‘operator>’ (operand types are ‘const boost::process::detail::std_out_<1>’ and ‘boost::process::opstream’ {aka ‘boost::process::basic_opstream<char>’})
| bp::child c(cmd.c_str(), bp::std_out > chldInput, bp::std_in < chldOutput);
| ~~~~~~~~~~~ ^ ~~~~~~~~~
| | |
| | boost::process::opstream {aka boost::process::basic_opstream<char>}
| const boost::process::detail::std_out_<1>
(还有几百行)。
谁能帮帮我。我遇到了障碍。
我修改了项目属性以包括 Boost header 路径和 Boost 链接器路径——加上 'not using predefined header files' 选项'
不知为何,Visual studio 无法将 std_in/std_out 视为 boost::process 命名空间的一部分。
我在 Linux 上编译了相同的文件,并且工作正常。相同版本的 Boost 1.78.0.
namespace bp = ::boost::process;
bp::opstream chldInput;
bp::ipstream chldOutput;
bp::child c(cmd.c_str(), bp::std_out > chldInput, bp::std_in < chldOutput);
不是看不到bp::std_in
和bp::std_out
。因为你换了流
ipstream
是一个读取管道流的实现 - 您可以使用与std::istream
s 类似的方式使用的流,例如std::cin
.opstream
是一个写管道流的实现——一个你可以像std::ostream
s 一样使用的流,比如std::cout
.
但是,bp::std_out
需要转到 bp::ipstream
(然后您可以从中读取)并且 bp::std_in
需要从 bp::opstream
(您可以写入).
示例:
bp::child c(cmd.c_str(), bp::std_out > chldOutput, bp::std_in < chldInput);
由于 chldInput
没有连接到任何东西,您可能想使用 stdin
代替:
bp::child c(cmd.c_str(), bp::std_out > chldOutput, bp::std_in < stdin);
您可能还想 c.wait()
命令完成。
像您一样交换流可能会产生类似
的错误program.cpp: In function ‘int main()’:
program.cpp: error: no match for ‘operator>’ (operand types are ‘const boost::process::detail::std_out_<1>’ and ‘boost::process::opstream’ {aka ‘boost::process::basic_opstream<char>’})
| bp::child c(cmd.c_str(), bp::std_out > chldInput, bp::std_in < chldOutput);
| ~~~~~~~~~~~ ^ ~~~~~~~~~
| | |
| | boost::process::opstream {aka boost::process::basic_opstream<char>}
| const boost::process::detail::std_out_<1>
(还有几百行)。