如何修复Mac上的clang-libc++错误:调用私有构造函数

How to fix clang libc++ error on Mac: calling private constructor

本文关键字:调用 构造函数 错误 何修复 Mac 上的 clang-libc++      更新时间:2023-10-16

我正试图在Mac OS X 10.10上用Clang和libc++编译一个(私有)C++软件,但收到了以下错误:

error: calling a private constructor of class 'std::__1::__wrap_iter<unsigned short *>'

此处显示完整的错误消息。

有人能解释这个错误以及如何修复它吗?一个导致这个错误的小型自包含代码示例,以及如何重写它以使其工作的选项,将是非常棒的!

您想要一个显示错误的自包含示例,但还没有提供自己的示例?stackoverflow不是这样工作的,你应该展示代码,而不是让人们猜测问题!

这会产生错误:

#include <vector>
void f(unsigned short* p)
{
    std::vector<unsigned short>::iterator i(p);
}

看起来您正试图从无效的指针构造迭代器(它可能适用于某些编译器,但不可移植)。

您可以尝试使用指针算术来获取迭代器:

std::ptrdiff_t d = std::distance(vec.data(), p);
std::vector<unsigned short>::iterator i = vec.begin() + d;

这假设p确实指向向量的元素,否则distance(vec.data(), p)是未定义的。