gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 14:12:40 26 4
gpt4 key购买 nike

我有一个名为 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 永远不会好。

关于另一个类操作中的 C++ 指针类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13408514/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com