在类成员中调用函数(C ++)

时间:2010-08-21 19:43:35

标签: c++ class scope friend access-control

Z.h

struct Z {
    Z();
    ~Z();
    void DoSomethingNasty();
}

X.h

struct X {
    X();
    ~X();
    void FunctionThatCallsNastyFunctions();
}

MainClass.h

#include "Z.h"
#include "X.h"

struct MainClass {
    MainClass();
    ~MainClass();
  private:
    Z _z;
    X _x;
}

X.cpp

X::FunctionThatCallsNastyFunctions() {
  //How can I do this? The compiler gives me error.
  _z.DoSomethingNasty();
}

如何从DoSomethingNasty()对象中调用_z函数?

2 个答案:

答案 0 :(得分:4)

编译器给出了错误,因为_z类中不存在X;它存在于MainClass类中。如果您想在Z上的X对象上调用方法,则需要为X提供自己的Z对象,或者您必须将其作为参数。哪一个是合适的取决于你想要做什么。

我认为您的混淆可能是这样的:您认为因为MainClass同时拥有X成员和Z成员,他们应该能够互相访问。这不是它的工作原理。 MainClass可以访问它们,但_x_z对象在其成员函数中,不知道自己的类之外的任何内容。

答案 1 :(得分:0)

您没有提供编译器错误,但是我猜测编译器错误是因为您只声明了DoSomethingNasty函数但没有定义它。这将导致链接时出错。

尝试将以下代码添加到.cpp文件

void Z::DoSomethingNasty() {
  // Code here
}

此外,正如@Tyler指出的那样,X类没有一个名为_z的成员变量,可以从中调用该函数。