Для части назначения я должен создать оператор присваивания для класса с именем HashGraph
, созданного моим профессором.Правильно вызовите функцию во вложенном классе из внешнего класса C++
Это то, что прототип функции выглядит следующим образом:
HashGraph<T>& operator = (const HashGraph<T>& rhs);
В этом HashGraph<T>
классе, у меня есть вложенный частный класс под названием LocalInfo
, который хранит четыре набора (определяются моим профессор) и ссылка на HashGraph
. Вот вложенный частный класс:
private:
//All methods and operators relating to LocalInfo are defined below, followed by
// friend functions for insertion onto output streams of HashGrah and LocalInfo
class LocalInfo {
public:
LocalInfo() : from_graph(nullptr), out_nodes(hash_str), in_nodes(hash_str), out_edges(hash_pair_str), in_edges(hash_pair_str) {}
LocalInfo(HashGraph<T>* g) : from_graph(g), out_nodes(hash_str), in_nodes(hash_str), out_edges(hash_pair_str), in_edges(hash_pair_str) {}
void connect(HashGraph<T>* g) {from_graph = g;}
bool operator == (const LocalInfo& rhs) const {
return this->in_nodes == rhs.in_nodes && this->out_nodes == rhs.out_nodes &&
this->in_edges == rhs.in_edges && this->out_edges == rhs.out_edges;
}
bool operator != (const LocalInfo& rhs) const {
return !(*this == rhs);
}
//from_graph should point to the HashGraph LocalInfo is in, so LocalInfo
// methods (see <<)
HashGraph<T>* from_graph;
ics::HashSet<std::string> out_nodes;
ics::HashSet<std::string> in_nodes;
ics::HashSet<ics::pair<std::string,std::string>> out_edges;
ics::HashSet<ics::pair<std::string,std::string>> in_edges;
};//LocalInfo
В моем операторе присваивания, я должен скопировать rhs
граф в this
и вернуть вновь скопированный график. Мой профессор говорит, что я должен использовать connect
, который находится в классе LocalInfo
, так что каждый скопированный объект LocalInfo
сбрасывает from_graph
на новый график (this
).
Вот что моя функция выглядит как прямо сейчас:
template<class T>
HashGraph<T>& HashGraph<T>::operator = (const HashGraph<T>& rhs){
this->clear();
for(auto i : rhs.node_values) {
HashGraph<T>::LocalInfo temp;
temp.connect(rhs);
node_values[i.first] = temp;
}
edge_values = rhs.edge_values;
return *this;
}
Это, однако, не компилируется из-за линии temp.connect(rhs)
, где он говорит, что есть no matching function call to HashGraph<int>::LocalInfo::connect(const HashGraph<int>&)
.
Способ, которым мой профессор настроен, заключается в том, что this->clear()
действительно пуст this
HashGraph. Чтобы скопировать карту node_values
, я использую его итератор для прохождения по карте rhs.node_values
.
В ноте, он это настроить так, что вызов node_values[i.first] = temp
будет на самом деле создать ключ в node_values
, которая является ключом с правой стороны, а затем присвоить значение temp
(который является LocalInfo
объект) в том, что ключ.
Но, как я уже сказал, это не компилируется. Итак, как я могу правильно использовать connect()
?
Я уверен, что мне нужно иметь rhs внутри соединения.Затем сохраните это в lhs. Поскольку граф, переданный в connect (g), присваивается 'from_graph', который применяется к' this' – Alex