C++ 如何创建指针指向对象的非友元全局函数?

C++ 如何创建指针指向对象的非友元全局函数?,c++,C++,我一直在创建一个非友元全局函数,该函数只有一个带指针的参数。 简单地说,我需要一个通过指针获取passesd对象并写出其所有成员的函数。 到目前为止,我在MyClass中创建了一个公共声明 void WriteOutMyClass2 (MyClass *kp2); 我也创建了这个函数 void WriteOutMyClass2 (MyClass *kp2) { cout << "_a :" <<kp2._a <<endl; } void

我一直在创建一个非友元全局函数,该函数只有一个带指针的参数。 简单地说,我需要一个通过指针获取passesd对象并写出其所有成员的函数。 到目前为止,我在MyClass中创建了一个公共声明

   void WriteOutMyClass2 (MyClass *kp2);
我也创建了这个函数

void WriteOutMyClass2 (MyClass *kp2)
{

    cout << "_a :" <<kp2._a <<endl;

}
void writeOutMyCyclass2(MyClass*kp2)
{

cout诊断相当清楚,甚至给出了建议

你需要

  cout << "_a :" <<kp2->_a <<endl;
  //                  ^^
然后使用
kp2->getA()
而不是
kp2->\u a

BTW,您应该为您的公共接口考虑更多可读的名称(可能更长的名称)。如果您的成员字段<代码>,A <代码>是一个价格,它的吸收器函数应该更好地被命名为“代码> GETPASS/<代码>(或者可能只是<代码>价格>代码>),而不是<代码> GETA…


保持代码的可读性很重要(即使是对自己来说,也要在几个月内)。代码的读写(或编译)频率更高。开发人员的时间花费远远超过计算机时间。

诊断非常清楚,甚至给出了建议

你需要

  cout << "_a :" <<kp2->_a <<endl;
  //                  ^^
然后使用
kp2->getA()
而不是
kp2->\u a

BTW,您应该为您的公共接口考虑更多可读的名称(可能更长的名称)。如果您的成员字段<代码>,A <代码>是一个价格,它的吸收器函数应该更好地被命名为“代码> GETPASS/<代码>(或者可能只是<代码>价格>代码>),而不是<代码> GETA…


保持代码的可读性很重要(即使是对你自己,在几个月内)。代码通常是读的而不是写的(或编译的).Developer的时间比计算机时间花费的要多得多。

也许你想使用“->”?消息是不言自明的。不要使用
kp2。在函数中使用
kp2->\u a
。这就是通过指针访问结构成员的方式。这些成员是私有的,如果你不提供getter,这将是一个障碍。请编辑您的问题,将非常有用的解释直接放在那里。好的,我将在15分钟内编辑帖子,可能您打算使用“->”?消息是自解释的。不要使用
kp2.\u a
在函数中使用
kp2->\u a
。这就是通过指针访问结构成员的方式。这些成员是私有的,这将如果你不提供获取者,这将是一个障碍。请编辑你的问题,将非常有帮助的解释直接放在那里。好的,我将在15分钟内编辑帖子,一旦OP改变,如标题所示,将与私人成员一起工作吗?和->之间的具体区别是什么?我来自c#,有些方面需要改进理货混乱?显然我尝试了“->”运算符,但没有结果。
a->b
==
(*a).b
我不怀疑有些规则被打破了,但这是我从一所大学得到的一个练习。这是为了展示一些方法而专门做的。一旦OP(如标题所示)变为非朋友,这对私人成员有效吗?和->之间到底有什么区别?我来自c#,有些方面完全混淆了?O以前我试过“->”操作符,但没有结果。
a->b
=
(*a).b
我不相信有些规则被打破了,但这个代码是我从一所大学得到的练习。它是专门用来展示一些方法的。
// inside class MyClass
public:
   int getA(void) const {return _a;};