私は抽象クラスfoo
を書き、bar
クラスはfooから継承します。map <string、pair <string、foo * >>とmap <string、pair <string、foo&>>の違いは何ですか?
map<string, pair<string, foo&>>
のマップコンテナを作成したいが、正常にコンパイルできない。コンパイラは、ここで私に
“std::pair<std::string,foo &>::pair”: not appropriate default constructor
を伝えるコードです:
#include <iostream>
#include <string>
#include <windows.h>
#include <map>
#include <utility>
using namespace std;
class foo
{
public:
virtual void t() = 0;
};
class bar :public foo
{
public:
void t()
{
cout << "bar" << endl;
}
};
int main()
{
bar b;
//wrong
//map<string, pair<string, foo&>> t;
//pair<string, foo&> p("b", b);
//t["t"] = p;
//right
map<string, pair<string, foo*>> t;
pair<string, foo*> p("b", &b);
t["t"] = p;
p.second->t();
}
私はmap<string, pair<string, foo*>>
とmap<string, pair<string, foo&>>
との違いを知りたいです。
ポインタと参照の違いは何ですか? – NathanOliver
https://stackoverflow.com/questions/57483/what-are-the-differences-between-a-pointer-variable-and-a-reference-variable-in –
@FrançoisAndrieux理由を詳しく説明できますか? – lens