另一类操作中的C ++指针类

时间:2012-11-16 00:16:30

标签: c++ class pointers

我有一个名为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。我知道,这个愚蠢的错误。

2 个答案:

答案 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();