2

更新:让我澄清我的文件并重申我的问题:

主文件

#include "other.h"

class MyClass
{
    public:
    void MyMethod();
    void AnotherMethod();

    OtherClass test;
}

主文件

#include "main.h"

void MyClass::MyMethod()
{
    OtherClass otherTemp;     // <--- instantitate OtherClass object
    otherTemp.OtherMethod();  // <--- in this method here, is where I want to also call MyClass::AnotherMethod()
}

void MyClass::AnotherMethod()
{
    // Some code
}

其他.h

class OtherClass
{
    public:
    void OtherMethod();
}

其他.cpp

#include "other.h"
void OtherClass::OtherMethod()
{
    // !!!! This is where I want to access MyClass::AnotherMethod(). How do I do it?
    // I can't just instantiate another MyClass object can I? Because if you look above in 
    // main.cpp, this method (OtherClass::OtherMethod()) was called from within
    // MyClass::MyMethod() already.
}

所以基本上我想要的是:你实例化对象 A,然后实例化对象 B,而对象 B 又调用来自对象 A 的方法。我确信这样的事情是可能的,但它可能只是糟糕的设计我这边。任何方向将不胜感激。

4

4 回答 4

3

有些人每堂课一个 .h/.cpp:

我的.h

#ifndef MY_H
#define MY_H
#include "other.h"
class MyClass
{
    public:
    void MyMethod();

    OtherClass test;
}
#endif // MY_H

其他.h

#ifndef OTHER_H
#define OTHER_H
class OtherClass
{
    public:
    void Othermethod();
}
#endif // OTHER_H

我的.cpp

#include "my.h"
void MyClass::MyMethod() { }

其他.cpp

#include "other.h"
#include "my.h"
void OtherClass::OtherMethod)()
{
   // (ab)using MyClass...
}

如果您仅使用 Visual Studio,则可以#pragma once使用#ifndef xx_h #define xx_h #endif // xx_h. 编辑:正如评论所说,以及相关的维基百科页面#pragma once也(至少)由 GCC 支持。

更新:关于更新的问题,与#include 无关,但更多关于传递对象......

MyClass 已经有一个嵌入的 OtherClass 实例,test. 所以,在 MyMethod 中,它可能更像是:

void MyClass::MyMethod()
{
    test.OtherMethod();
}

如果 OtherMethod 需要访问 MyClass 实例,请将此实例作为引用或指针传递给 OtherMethod:

引用

class OtherClass { public: void OtherMethod(MyClass &parent); }

void MyClass::MyMethod() { test.OtherMethod(*this); }

void OtherClass::OtherMethod(MyClass &parent)
{
   parent.AnotherMethod();
}

按指针

class OtherClass { public: void OtherMethod(MyClass *parent); }

void MyClass::MyMethod() { test.OtherMethod(this); }

void OtherClass::OtherMethod(MyClass *parent)
{
   if (parent == NULL) return;  // or any other kind of assert
   parent->AnotherMethod();
}
于 2010-07-31T17:06:26.230 回答
2

在 C++ 源文件中的任一类之外定义函数,而不是在头文件中:

void OtherClass :: Othermethod() {
   // call whatever you like here
}
于 2010-07-31T16:57:21.693 回答
2

创建一个 .cpp 文件:

#include "main.h"

void OtherClass::Othermethod()
{
    MyClass m; //ok :)
    m.MyMethod(); //also ok.
}

无论如何,实现不属于标题。

于 2010-07-31T16:57:38.233 回答
0

只需#include 它在 other.cpp 中

于 2010-07-31T16:57:42.523 回答