从外部 class C++ 正确调用嵌套 class 中的函数
Correctly call a function in a nested class from an outer class C++
对于作业的一部分,我应该为我的教授创建的名为 HashGraph
的 class 创建一个赋值运算符。
函数原型如下所示:
HashGraph<T>& operator = (const HashGraph<T>& rhs);
在这个 HashGraph<T>
class 中,我有一个名为 LocalInfo
的嵌套私有 class,它存储四个集合(由我的教授定义)和对 HashGraph
。这是嵌套的私有 class:
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
和 return 新复制的图。我的教授说我必须使用 LocalInfo
class 中的 connect
,这样每个复制的 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()
呢?
该函数需要一个指针,而不是对象或引用。
temp.connect(&rhs);
您确定要连接到 rhs
而不是 this
吗? rhs 是 const HashGraph<int> &
,这使您无权修改结构。
对于作业的一部分,我应该为我的教授创建的名为 HashGraph
的 class 创建一个赋值运算符。
函数原型如下所示:
HashGraph<T>& operator = (const HashGraph<T>& rhs);
在这个 HashGraph<T>
class 中,我有一个名为 LocalInfo
的嵌套私有 class,它存储四个集合(由我的教授定义)和对 HashGraph
。这是嵌套的私有 class:
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
和 return 新复制的图。我的教授说我必须使用 LocalInfo
class 中的 connect
,这样每个复制的 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()
呢?
该函数需要一个指针,而不是对象或引用。
temp.connect(&rhs);
您确定要连接到 rhs
而不是 this
吗? rhs 是 const HashGraph<int> &
,这使您无权修改结构。