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

时间:2014-11-13 10:26:23

标签: c++ macos compiler-errors clang++ libc++

我试图在Mac OS X 10.10上使用Clang和libc ++编译(私有)C ++软件,并收到此错误:

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

完整的错误消息here

有人可以解释此错误以及如何解决此问题吗? 一个导致此错误的小型自包含代码示例以及如何重写它以使其正常工作的选项将会很棒!

1 个答案:

答案 0 :(得分:3)

您是否要求提供一个显示错误的自包含示例,但尚未提供您自己的示例?这不是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)未定义。