我有一个名为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->afoo1
时afoo1 == NULL
很好,但是,如果尝试访问afoo1
的属性,则每次都会崩溃。 NULL->someProperty
永远不行。