以下代码在 C++ 中是否合法。访问朋友类成员的公共方法?我知道这听起来令人困惑,最好的方式是在代码中展示它。我想知道 TestClassC::Method() 在下面的代码中是否有效?
我已经编译(g++)并且它可以工作,但是,我遇到了一种情况,它在 TestClassC::Method() 的其他机器/发行版上产生分段错误。这让我想知道 this->classA_Ptr->classB.Method(); 在 C++ 中是合法的。
#include <iostream>
using namespace std;
class TestClassB
{
public:
TestClassB(void){};
~TestClassB(void){};
void Method(void){
cout << "Hello Again" << endl;
}
};
class TestClassC; //Forward Declaration
class TestClassA
{
friend class TestClassC;
public:
TestClassA(void){};
~TestClassA(void){};
private:
TestClassB classB;
};
class TestClassC
{
public:
TestClassC(TestClassA* a_Ptr){
this->classA_Ptr = a_Ptr;
}
~TestClassC(void){};
void Method(void){
//Is this Valid/Legal ???
this->classA_Ptr->classB.Method();
}
private:
TestClassA* classA_Ptr;
};
int main()
{
cout << "Hello world!" << endl;
TestClassA testClassA;
TestClassC classC(&testClassA);
classC.Method();
return 0;
}