代码之家  ›  专栏  ›  技术社区  ›  liaK

由getter获取时在其他类中声明结构变量

  •  1
  • liaK  · 技术社区  · 15 年前

    我使用QT 4.5,所以C++。我有一节这样的课

     class CClass1
        {
             private:
                   struct stModelDetails
                   {
                          QString name;
                          QString code;
                          ..... // only variables and no functions over here
                   };
                   QList<stModelDetails> m_ModelDetailsList;        
    
             public:
                   QList<stModelDetails> getModelDetailsList();
                   ...               
        };
    

    m_ModelDetailsList;

    我还有一节课要讲 CClassStructureUsage ,在那里我将呼叫 getModelDetailsList() 功能。现在我需要遍历QList并获得 name code 从每个 stModelDetails .

    包括CClass1的头文件 无法识别中stModelDetails的类型 CClassStructureUsage类 . 当我拿到结构清单的时候

    QList<stModelDetails> ModelList = obj->getModelInformationList();
    

    上面写着 stModelDetails公司 : .

    5 回复  |  直到 15 年前
        1
  •  2
  •   Jerry Coffin    15 年前

    你已经得到了一些关于如何直接解决问题的建议。一、 但是,我建议您退一步考虑一下您在这里要完成的任务。首先,你说你只是 name 各成员 stModelDetails 项目。基于此,我将首先更改函数以仅返回:

    QList<QString> GetModelDetailNames();
    

    或者,很可能是:

    QVector<QString> GetModelDetailNames();
    

    前者有几个优点。首先,它减少了需要复制的数据量。其次,它使客户机代码不必知道CClass1的更多实现细节。后者保留了这些优点,并添加了一些自己的优点,主要是避免了在没有指出任何原因的情况下使用链表的开销 希望 使用链表(这样的理由真的很不寻常)。

    另一种方法是找出为什么外部代码需要访问CClass1的大量内部数据,以及CClass1直接提供该服务而不是外部代码需要访问其数据是否有意义。

        2
  •  4
  •   Péter Török    15 年前

    struct stModelDetails private ,从类外看不到。你应该在报纸上申报 public

    class CClass1
    {
         private:
               QList<stModelDetails> m_ModelDetailsList;        
    
         public:
               struct stModelDetails
               {
                      QString name;
                      QString code;
                      ..... // only variables and no functions over here
               };
    
               QList<stModelDetails> getModelDetailsList();
               ...               
    };
    
        3
  •  4
  •   Troubadour    15 年前

    您需要使用完全限定名 CClass1::stModelDetails

        4
  •  0
  •   mtvec    15 年前

    stModelDetails 作为一个私人班级。把它放到公共部分应该可以解决你的问题。

        5
  •  0
  •   Matt T    15 年前

    有两个问题: 2.因为它是嵌套的,所以在类外部它的正确名称是CClass1::stModelDetails。

    如果您真的需要从外部访问它,您可能需要考虑它是CClass1的成员还是独立类或结构。当嵌套类/结构是类的实现细节时,我通常只使用它们。