Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用std::experimental::optional给出编译错误_C++_C++11_Boost Optional - Fatal编程技术网

C++ 使用std::experimental::optional给出编译错误

C++ 使用std::experimental::optional给出编译错误,c++,c++11,boost-optional,C++,C++11,Boost Optional,我是第一次使用可选功能,如果知道这段代码有什么问题,我希望从存储在retCode #include <iostream> #include <experimental/optional> std::experimental::optional<std::tuple<uint16_t, uint32_t, uint32_t>> addEntity(); std::experimental::optional<std::tuple<u

我是第一次使用可选功能,如果知道这段代码有什么问题,我希望从存储在
retCode

#include <iostream>
#include <experimental/optional>
std::experimental::optional<std::tuple<uint16_t, uint32_t, uint32_t>> addEntity();

  std::experimental::optional<std::tuple<uint16_t, uint32_t, uint32_t>> addEntity() {
    uint32_t ipR = 1111;
    uint32_t ipU = 2222;
    uint16_t entityId = 0;
    return std::make_tuple(entityId, ipR, ipU);
  }


int main()
{
  auto retCode =  addEntity();
  std::cout<<std::get<0>(retCode)<<std::endl;
  return 0;

}
#包括
#包括
std::实验::可选加法();
std::实验::可选加法(){
uint32_t ipR=1111;
uint32_t ipU=2222;
uint16_t entityId=0;
返回std::make_tuple(entityId、ipR、ipU);
}
int main()
{
自动重新编码=加法();

std::cout没有从
可选
T
的隐式转换,您需要提取值

int main()
{
  auto retCode =  addEntity();
  std::cout<<std::get<0>(retCode.value())<<std::endl; // can throw std::bad_optional_access
  return 0;
}
intmain()
{
自动重新编码=加法();

std::cout
#include
缺失,如果您可以使用C++17,您将直接使用
std::optional
。看起来
std::tuple
的析构函数只能从C++17中进行很小的销毁,您使用的是哪个GCC版本?它必须支持C++17的
std::tuple
。您是否设置了编译器标志
-std=C++17
?@BJovke
std::tuple
是C++11源代码:是的,因为可选的不是一个tuple。但您可以通过
value()
从中获取一个tuple。
int main()
{
  auto retCode =  addEntity();
  std::cout<<std::get<0>(retCode.value())<<std::endl; // can throw std::bad_optional_access
  return 0;
}