【问题标题】:Unable to access class while method chaining in c++在 C++ 中方法链接时无法访问类
【发布时间】:2021-10-28 21:16:08
【问题描述】:

我正在研究图书馆,但遇到了奇怪的问题,我不确定发生了什么。我打破了我正在编写的课程的核心部分来复制这个问题。

要点是我有几个类用于管理项目中 LED 的索引分组。

我有一个类来跟踪 LED 索引范围:

class Range
{
public:
  Range () {}
  Range (int start, int end):_start (start), _end (end) {}

private:
  int _start;
  int _end;
};

另一个类将范围组合成一个部分:

class Section
{
public:
  Section () {}

  void addRange(int start, int end)
  {
    addRange(Range (start, end));
  }

  void addRange(Range r)
  {
    if (_rangeCount < TOTAL_RANGES)
      {
        _ranges[_rangeCount] = r;
        _rangeCount++;
      }
  }

  Range getRange(int index)
  {
    return _ranges[index];
  }

  int getRangeCount()
  {
    return _rangeCount;
  }

private:
  int _rangeCount = 0;
  Range _ranges[TOTAL_RANGES];
};

这两个类一起工作得很好。我可以创建一个部分,向其中添加几个范围,然后输出一个部分中的总范围 (you can see a live example here):

int main ()
{

  Section s = Section ();
  s.addRange (0, 9);
  s.addRange (10, 19);
  s.addRange (20, 29);

  cout << "range count: " << s.getRangeCount () << endl;

  return 0;
}

当我尝试创建一个用于创建和访问这些部分的管理类时,问题就来了:

class SectionManager {
  public:
    SectionManager(){}
    
    void addSections(int total) {
       for(int i = 0; i < total; i++) {
           _sections[i] = Section();
       }
       _totalSections += total;
    }
    
    Section getSection(int index){
        return _sections[index];
    }
    
    int getTotalSections(){
        return _totalSections;
    }
  
  private:
    int _totalSections = 0;
    Section _sections[TOTAL_SECTIONS];
  
};

当我尝试添加 SectionManager 时,一切都可以正常编译并且似乎可以正常工作,直到我添加范围:

int main ()
{

    SectionManager manager = SectionManager();
    manager.addSections(5);

    cout << "total sections: " << manager.getTotalSections()<< endl;
    
    manager.getSection(0).addRange(0, 9);
    manager.getSection(0).addRange(10, 19);
    manager.getSection(0).addRange(20, 29);
    
    cout << "total ranges: " << manager.getSection(0).getRangeCount() << endl;


  return 0;
}

当我这样做时,这些部分会很好地添加,但是当我尝试访问其中一个部分以向其中添加一个范围时,该范围似乎没有被添加 (the live version of this one can be found here):

我不确定出了什么问题。 感觉好像我遇到了一些范围问题,但是我对 cpp 还很陌生,我不确定障碍来自哪里(实际上我很难弄清楚这个 stackoverflow 问题的标题 b/c 我不知道如何简洁地描述这个问题)。

我在想“也许我需要在主函数中创建一个指针,返回存储部分的地址,然后使用它来添加范围”,但后来我收到一个关于尝试获取地址的错误一个临时的:

任何帮助将不胜感激。我觉得这对于有经验的 c++ 工程师来说可能是一件容易的事,但我是新手,并且孤立地工作/学习,所以我看不出有什么问题。

【问题讨论】:

    标签: c++ scope


    【解决方案1】:

    getSection 按值返回Section,因此调用代码会获得一个全新的副本。您可以更改代码以返回如下引用:

    Section& getSection(int index){
        return _sections[index];
    }
    

    【讨论】:

    • Range getRange(int index) 相同。
    • 哦,太棒了。这是有道理的,感觉有点像:facepalm:。感谢您指出。我用方法链试了一下,效果很好!
    猜你喜欢
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多