Код ниже - это упрощенная версия того, с чем я работал сегодня. Он имеет 2 класса A и B. Класс B пытается использовать частный конструктор класса A, но он терпит неудачу. Если я создаю конструктор публично, код компилируется отлично. Почему?класс друга не может вызвать частный конструктор
#include <vector>
class A
{
friend class B;
private:
A(int * int_ptr) {
m_int = *int_ptr;
}
private:
int m_int;
};
class B
{
friend class A;
public:
static void create_vec_a() {
int v1(1);
int v2(2);
std::vector<int *> int_ptr_vec{
&v1,
&v2
};
std::vector<A> a_vec(int_ptr_vec.begin(),
int_ptr_vec.end());
}
};
int main(int argc, char *argv[])
{
B::create_vec_a();
return 0;
}
Я получаю ошибку в Visual Studio является:
'A::A': cannot access private member declared in class 'A'
На Clang:
test.cpp:28:18: note: in instantiation of function template specialization 'std::vector<A, std::allocator<A> >::vector<__gnu_cxx::__normal_iterator<int **, std::vector<int *, std::allocator<int *> > >, void>' requested here
std::vector<A> a_vec(int_ptr_vec.begin(),
^
test.cpp:7:2: note: declared private here
A(int * int_ptr) {
^