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_inbp::std_out。因为你换了流

  • ipstream 是一个读取管道流的实现 - 您可以使用与 std::istreams 类似的方式使用的流,例如 std::cin.
  • opstream 是一个写管道流的实现——一个你可以像 std::ostreams 一样使用的流,比如 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>

(还有几百行)。