2

我有一个班级foo1,在 foo1.h 我有

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

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

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

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

谁能帮我这个?

谢谢

额外说明

我从 foo2 制作了一个 dll 文件,并在另一个程序中使用它,我无权访问它的源代码。只是为了让事情更清楚一点。

回答

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

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

4

2 回答 2

0

你需要做的是foo2Instance->afoo1->var,在 foo2 方法中,这只是afoo1->var。如果那是崩溃,则更有可能是因为您没有afoo1在 foo2 的构造函数中进行初始化。

#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

确保你有#include "foo1.h"foo2.h

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

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

于 2012-11-16T00:20:17.817 回答
0

foo2,其中我有一个基于 foo1 的对象

不,你有一个指向 foo1 的指针。如果您没有将该指针设置为实际指向 foo1 对象的实例,那么尝试通过它访问任何内容很可能会导致崩溃。这听起来像你正在经历的。

因此,听起来您应该将该变量设为实际的 foo1 (例如foo1 afoo1;:),或者您需要将该指针设置为指向 evanmcdonnal 建议的实例(例如afoo1 = new foo1();:)

于 2012-11-16T00:41:47.917 回答