我有一个名为foo1的类,在foo1.h中我有

class foo1
{
public:
int var;
foo1();
};


还有另一个名为foo2的类,其中有一个基于foo1的对象:

class foo2
{
public:
foo1 *afoo1;
foo2();
void func1(int,int);
};


我的问题是我如何可以访问afoo1->var。如果我在foo2.cpp中使用afoo1->var,则一切看起来都很好,并且编译时没有错误。但是,当我在命令提示符窗口中运行它时,会弹出一个窗口,并要求关闭程序。我猜这是因为我违反了内存访问,原因可能是afoo1->var

谁能帮我这个?

谢谢

额外注意

我从foo2中创建了一个dll文件,并在另一个程序中使用了该文件,该程序的源代码我无权访问。只是为了使事情澄清更多。

回答

我犯了两个错误。第一个是我指的是Null。 afoo1 = new foo1();的构造函数中的foo2负责了这一点。

第二个是我的makefile中没有包含foo1.cpp。我知道,愚蠢的错误。

最佳答案

您需要执行foo2Instance->afoo1->var,在foo2方法内部,这只是afoo1->var。如果崩溃了,那很可能是因为您没有在foo2的构造函数中初始化afoo1

#ifndef FOO1_H
#define FOO1_H

class foo1
{
public:
int var;
foo1() { var = 0; } //make sure the constructor is in fact defined.
// if it isn't implemented it would cause that linker error.
};

#endif


确保foo2.h中具有#include "foo1.h"

   // constructor and deconstructor, these are in the cpp file.
   foo2::foo2()
   {
        afoo1 = new foo1();
   }
   foo2::~foo2()
   {
        delete afoo1;
   }


如果获取NullReferenceException,则可能是因为在构造函数中缺少该行。当afoo2->afoo1afoo1 == NULL很好,但是,如果尝试访问afoo1的属性,则每次都会崩溃。 NULL->someProperty永远不行。

07-28 10:42