【发布时间】:2021-07-27 08:30:48
【问题描述】:
我有一个问题类似于Convert vector of vector to pointer of pointer 中提到的问题。
唯一的区别是我必须使用布尔值而不是短裤。
但是如果我编译这段代码:
#include <vector>
/* C like api */
void foo(bool **psPtr, const int x, const int y);
int main()
{
const int x = 2, y = 3;
std::vector<std::vector<bool>> vvsVec(x, std::vector<bool>(y, 0));
std::vector<bool *> vpsPtr(x, nullptr);
/* point vpsPtr to the vector */
int c = 0;
for (auto &vsVec : vvsVec)
vpsPtr[c++] = vsVec.data();
/* api call */
foo(vpsPtr.data(), x, y);
return 0;
}
我收到以下错误:
./dummy/main.cpp:15:错误:分配给 '__gnu_cxx::__alloc_traits<:allocator> >::value_type'(又名 'bool *') 来自不兼容的类型'void'
和
./dummy/main.cpp:15: 错误: void 值没有被忽略为 它应该是 vpsPtr[c++] = vsVec.data();
拜托,谁能解释一下我做错了什么以及如何解决这个问题?
谢谢。
【问题讨论】:
-
解决这个难题的一个常见方法是将布尔向量表示为
std::vector<char>。如果需要强类型,可以使用enum class fake_bool : char { fake_false, fake_true };或类似的东西。为了更方便,您可以实现与bool之间的转换运算符。 -
@KondradRudolph 我在考虑通常的替代品,但是当目标是获得
bool**时,我不确定它们是否适用
标签: c++ c++11 vector raw-pointer