這裏是不編譯代碼:的std ::地圖和私有構造
#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的映射?「_ No. –
」*根據我在錯誤消息*「什麼錯誤消息? – user2079303
爲什麼downvote? –