【发布时间】:2019-08-13 15:05:34
【问题描述】:
我正在编写一个需要返回多个变量的函数,其中一个是位集。然后我遇到了一些奇怪的编译错误。
我尝试了不同的编译器,它们都会产生错误,尽管消息不同。
我试过谷歌搜索,似乎它与公共和私有继承有关。但我认为它不会以任何方式影响这段代码。
简化代码 (C++17) 如下所示:
#include <bitset>
auto f() { return bitset<100>(); }
int main()
{
auto [a] = f();
return 0;
}
如果我删除方括号(即删除结构化绑定并使用普通自动),它可以工作。
错误信息如下:
source.cpp:在函数'int main()'中:
source.cpp:9:18: 错误:'std::_Base_bitset' 是 'std::bitset' 的不可访问的基础
9 | auto [a] = f();
| ^
编译器返回:1
所以我的问题是:这是预期的行为还是我做错了什么?欢迎提出建议。
【问题讨论】:
-
我很好奇你想用这个实现什么/你希望会发生什么?您的函数不返回多个值;它实际上只是返回一个位集。一个位集。