如何在 C++ 中引用类结构中的函数?

Posted

技术标签:

【中文标题】如何在 C++ 中引用类结构中的函数?【英文标题】:How can I refer to the function in structure of class in C++? 【发布时间】:2018-08-16 02:31:35 【问题描述】:

我想使用返回struct aa 的getSth 函数,输入main()。 你能告诉我推荐它的方法吗?

//info.h
namespace nsp 
  class A 
    struct Info 
      struct aa 
        std::string str;
        int num;
        aa(): num(0) 
      ;
      std::vector<aa> aas;
      aa getSth();
    ;
  ;


//info.cpp
A::Info::aa A::Info::getSth() 
aa ret;
for(auto &tmp: aas) 
  if(ret.num < aas.num)
    ret.num = aas.num;

return ret;


// main.cpp
#include info.h
namepace nsp 
  class A;

int main()

  nsp::A *instance = new nsp::A();
  // How can I refer getSth using "instance"?
  .....
  return 0;

【问题讨论】:

【参考方案1】:

简单地说,你不能。您在 Info 类型的嵌套结构中声明了 getSth,但没有声明该类型的任何数据成员。所以没有对象可以调用nsp::A::Info::getSth 反对。

更糟糕的是,您将 A 声明为 class 并且没有提供访问说明符。一个类的成员都是private,没有访问说明符,所以getSth不能在类外访问。如果你这样做了:

class A 
  // other stuff; doesn't matter
  public:
  aa getSth();
;

那么,您可以像这样从main 访问它:

int main()

  nsp::A *instance = new nsp::A();
  // now it's accessible
  instance->getSth();
  // deliberate memory leak to infuriate pedants
  return 0;

【讨论】:

@Code-Apprentice 很高兴你想改进我的答案,但我真的更喜欢我自己的写作风格。 我为越界道歉。只是像“如果你已经完成了”这样的短语对于你试图表达的想法来说似乎是被动的(甚至是冗长的)。 感谢您的建议。但是 info.h 现在无法修复。您对仅修复 main 的方法有任何想法吗? @beginner 如果您在 A 的声明中遗漏了某些内容(例如 Info 对象的声明),请将其编辑进去,我们也许可以找到出路.如果没有,那只是运气不好,

以上是关于如何在 C++ 中引用类结构中的函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 C++ 中的引用中获取值

C++:如何在结构中定义类实例。类具有参数化构造函数[重复]

如何从 C++ 中的类文件运行函数?

如何在 C++ 中的类中递归调用函数方法?

如何在一个类中执行 C++ 多线程(将线程引用保持为成员 var)

如何在 C++ 中通过引用返回类对象?