如何在 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++:如何在结构中定义类实例。类具有参数化构造函数[重复]