這可能是一個該死的簡單問題。但我似乎無法將我的對象插入到地圖中。我很確定我不必定義自己的拷貝構造函數,因爲我只使用標準的東西。感覺像現在敲我的頭在牆上:大聲笑:,這是我試圖創建地圖:頂點的在std :: map中插入非默認構造元素
map<unsigned, Vertex> vertexes;
頭文件
#ifndef KNOTSV2_VERTEX_H
#define KNOTSV2_VERTEX_H
#include <forward_list>
#include <set>
#include <iostream>
#include "VertexType.h"
using namespace std;
// Defines.
typedef tuple<edge_list, edge_list, edge_list> neigh_set_entry;
/*
* Matching
*/
struct match_first {
match_first(unsigned value) : value(value) {};
template<class A>
bool operator()(const pair<unsigned, A> &a) {
return a.first == value;
}
private:
unsigned value;
};
class Vertex {
public:
/*
* Constructors
*/
Vertex(unsigned identifier, VertexType *type, unsigned attributes) : identifier(identifier), type(type), values(attributes_vec(attributes)) {};
// Methods ..
private:
/*
* Members
*/
unsigned identifier;
attributes_vec values;
VertexType *type;
vector<pair<unsigned, neigh_set_entry>> neigh_set;
};
功能我試圖撥打:
Vertex& Graph::create_vertex(VertexType &type) {
Vertex v(id_enumerator++, &type, type.num_attributes());
return vertexes[id_enumerator] = v;
}
注:在成員函數的實例化 '的std :: __ 1個::地圖,性病:: __ 1 ::分配器>> ::操作符[]' 這裏請求
return vertexes[id_enumerator] = v;
^
注:候選人構造函數(隱式轉移構造函數)並不可行:需要1個說法,但0分別提供
class Vertex {
^
注:候選人構造函數(隱式副本構造函數)不可行:
注意:候選構造函數不可行:需要3個參數,但0個是提供 頂點(無符號標識符,VertexType *類型,無符號屬性):標識符(標識符),類型(類型),值(attributes_vec(屬性)){};
所以我明白這是由於它試圖調用'正常構造函數',但我不想爲傳遞給構造函數的值創建getter和setter;因爲它們可能不會改變。作爲第二次嘗試,我嘗試使用map :: emplace,但沒有運氣。除了創建一個正常的構造函數之外,還有其他選擇嗎?
試過emplace插入和成對構造,也沒有運氣。
Vertex& Graph::create_vertex(VertexType &type) {
//Vertex v();
return vertexes.insert(make_pair(id_enumerator, Vertex(id_enumerator, &type, type.num_attributes()))).first->second;
}
Vertex& Graph::create_vertex(VertexType &type) {
//Vertex v();
return vertexes.emplace(id_enumerator, Vertex(id_enumerator, &type, type.num_attributes())).first->second;
}
Vertex& Graph::create_vertex(VertexType &type) {
//Vertex v();
return vertexes.emplace(piecewise_construct, forward_as_tuple(id_enumerator), forward_as_tuple(id_enumerator, &type, type.num_attributes())).first->second;
}
什麼編譯錯誤,你在嘗試'insert'和'emplace'時? – NathanOliver