我正在尝试在 Mac OS X 10.10 上使用 Clang 和 libc++ 编译(私有(private))C++ 软件,但出现此错误:
error: calling a private constructor of class 'std::__1::__wrap_iter<unsigned short *>'
完整的错误信息 here .
谁能解释这个错误以及如何解决它? 一个导致此错误的小型独立代码示例以及如何重写它以使其正常工作的选项会很棒!
最佳答案
您要求提供一个显示错误的独立示例,但没有提供您自己的示例? 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
确实指向 vector 的一个元素,否则 distance(vec.data(), p)
是未定义的。
关于c++ - 如何修复 Mac 上的 clang libc++ 错误 : calling private constructor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26906589/