首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确地从外部类C++调用嵌套类中的函数

正确地从外部类C++调用嵌套类中的函数
EN

Stack Overflow用户
提问于 2015-03-11 08:31:28
回答 2查看 177关注 0票数 0

对于一个赋值的一部分,我应该为我的教授创建的一个名为HashGraph的类创建一个赋值操作符。

这就是函数原型的样子:

代码语言:javascript
复制
HashGraph<T>& operator = (const HashGraph<T>& rhs);

在这个HashGraph<T>类中,我有一个名为LocalInfo的嵌套私有类,它存储四个集合(由我的教授定义)和一个对HashGraph的引用。下面是嵌套的私有类:

代码语言:javascript
复制
  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)。

下面是我的函数现在的样子:

代码语言:javascript
复制
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()呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-11 08:39:13

您确定要连接到rhs而不是this吗?rhs是const HashGraph<int> &,它使您没有修改结构的权限。

票数 1
EN

Stack Overflow用户

发布于 2015-03-11 08:34:20

函数需要指针,而不是对象或引用。

代码语言:javascript
复制
temp.connect(&rhs);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28981722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档