Вот код, который не компилируется:станд :: карта и частный конструктор
#include <map>
using namespace std;
class A;
class B {
friend class A;
int b;
B():b(1){};
B(int b_):b(b_){};
};
class A {
map<int,B> objects;
public:
void init(){
objects[2]=B(3);
}
};
int main(){
A a;
a.init();
return 0;
}
Из того, что я понимаю, в сообщении об ошибке:
/usr/include/c++/4.8/bits/stl_map.h: In instantiation of ‘std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const key_type&) [with _Key = int; _Tp = B; _Compare = std::less<int>; _Alloc = std::allocator<std::pair<const int, B> >; std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type = B; std::map<_Key, _Tp, _Compare, _Alloc>::key_type = int]’:
foo.cc:18:24: required from here
foo.cc:9:10: error: ‘B::B()’ is private
B():b(1){};
^
In file included from /usr/include/c++/4.8/map:61:0,
from foo.cc:1:
/usr/include/c++/4.8/bits/stl_map.h:469:59: error: within this context
__i = insert(__i, value_type(__k, mapped_type()));
^
проблема «карта» не является друг B
, поэтому он может не использовать конструктор B()
(кстати, я замечаю, что objects[2]=B(3);
требует B()
!).
Я нашел следующий обходной путь:
objects.insert(pair<int,B>(2,B(3)));
, который работает ... до тех пор, пока ~B()
также частные.
Итак, есть ли способ построить карту B
внутри A
, когда конструкторы и деструкторы B
являются частными?
Другой вопрос: почему objects[2]=B(3);
с использованием B()
?
_ "Так , есть ли способ построить карту B внутри A, когда конструкторы и деструкторы B являются частными? »_ № –
« * Из того, что я понимаю в сообщении об ошибке * «Какое сообщение об ошибке? – user2079303
Почему downvote? –