2

ZH

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

Xh

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

主类.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对象调用函数?

4

2 回答 2

4

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

我想你的困惑可能是这样的:你认为因为MainClass既有X成员又有Z成员,他们应该能够相互访问。这不是它的工作原理。MainClass可以同时访问它们,但是它们的成员函数中的_xand_z对象不知道它们自己的类之外的任何东西。

于 2010-08-21T19:46:46.377 回答
0

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

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

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

此外,正如@Tyler 指出的那样,X 类没有命名的成员变量_z来调用函数。

于 2010-08-21T19:46:25.970 回答