struct Z {
Z();
~Z();
void DoSomethingNasty();
}
struct X {
X();
~X();
void FunctionThatCallsNastyFunctions();
}
#include "Z.h"
#include "X.h"
struct MainClass {
MainClass();
~MainClass();
private:
Z _z;
X _x;
}
X::FunctionThatCallsNastyFunctions() {
//How can I do this? The compiler gives me error.
_z.DoSomethingNasty();
}
如何从DoSomethingNasty()
对象中调用_z
函数?
答案 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
的成员变量,可以从中调用该函数。