Вызов функции в членах класса (C ++) - PullRequest
2 голосов
/ 21 августа 2010

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 ]

4 голосов
/ 21 августа 2010

Компилятор выдает ошибку, поскольку _z не существует в классе X;он существует в классе MainClass.Если вы хотите вызвать метод для Z объекта из X, вам нужно либо предоставить X свой собственный Z объект, либо передать его ему в качестве параметра.То, что из этого подходит, зависит от того, что вы пытаетесь сделать.

Я думаю, что ваша путаница может заключаться в следующем: вы думаете, что, поскольку в MainClass есть и член X, и член Zони должны иметь возможность доступа друг к другу.Это не так, как это работает.MainClass может обращаться к ним обоим, но объекты _x и _z в своих функциях-членах не имеют представления ни о чем, кроме своего собственного класса.

0 голосов
/ 21 августа 2010

Вы не предоставили ошибку компилятора, но из примера я предполагаю, что ошибка компилятора заключается в том, что вы только объявили функцию DoSomethingNasty, но не определили ее.Это приведет к ошибке во время ссылки.

Попробуйте добавить следующий код в ваш файл .cpp

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

Кроме того, как указал @Tyler, класс X не имеет переменной-члена с именем _z, из которой вызываетсяфункция включена.

...