我有一个名为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
。我知道,这个愚蠢的错误。
答案 0 :(得分:0)
你需要做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
永远不会好。
答案 1 :(得分:0)
foo2,其中我有一个基于foo1的对象
不,你有一个指向foo1的指针。如果您尚未将该指针设置为实际指向foo1对象的实例,那么尝试通过它访问任何内容很可能会导致崩溃。这听起来就像你正在经历的那样。
所以听起来要么你应该把变量变成实际的foo1(例如:foo1 afoo1;
),要么你需要将指针设置为指向evanmcdonnal建议的实例(例如:afoo1 = new foo1();
)