另一个类的c ++私有对象:初始化并使用它调用该类中的函数

gladys0313

我有两个类AB,其中类B的样子

B.h

class B
{
 public:
    B();
    virtual ~B();
    void eval(int a, int b);
 private:
    A* APointer;
};

相应地我有

B.cpp

B::B():APointer(NULL){}
B::~B(){}

void B::eval(int a, int b)
{
   if a == b
      {
      APointer->run(); // run() is a public method defined in class A
      }
}

那么A类就像:

A.h

#include "LuaBridge.h"
extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
using namespace luabridge;

class LuaParser
{
  public:
    LuaParser(lua_State* L);
    virtual ~LuaParser();
    void run();

  private:
    LuaRef mRun;
    LuaRef mStop;
    lua_State* mL;
};

A.cpp

LuaParser::LuaParser(lua_State* L) :mRun(L),mStop(L),mL(L) {}
LuaParser::~LuaParser(){}

void LuaParser::run(){
std::cout<<"This project runs!"<<std::endl;
}

系统很复杂,实际上我在类C成员函数中称呼此eval函数。在该类中,我通过B* BPointer在构造函数中定义了一个私有成员BPointer C(B* BPointer = NULL),然后BPointer->eval(a,b)在类C成员函数中使用了它。

在我的main代码,我定义B类像一个指针B* BPointer,我使用该指针调用该方法B::eval通过

BPointer -> eval(a, b);

但是,当我在Visual Studio中逐步运行它时,在命令行上APointer->run();我注意到this指针就像:

Value: 0xcdcdcdcd{APointer=???}

当我尝试运行此命令时,出现了一个错误:

Access violation reading location 0xCDCDCDD1.

好吧...我不知道如何解决这个问题,我想知道的是:

  1. 整个想法(即使用私有对象在此类方法中调用另一个类的函数)是否可行?

  2. 如果这个想法可行,那么我应该如何修改我的代码?

任何建议或想法都将受到欢迎!

调性

整个想法(即使用私有对象在此类方法中调用另一个类的函数)是否可行?

是的,这很普遍。

如果这个想法可行,那么我应该如何修改我的代码?

您需要了解对象和指针之间的区别。指针是可能甚至未分配的存储区域的地址。

您在这里拥有的两个指针不指向任何已分配的内存,因此不存在您可以调用其方法的对象。

BPointer是统一的,它包含随机存储器区域的地址(或0xcdcdcdcd调试版本中的幻数),该地址可能只包含属于您或不属于您的任何内容。取消引用它是未定义的行为为了避免这种情况,您应该创建B对象并将其指针分配给BPointer

B *BPointer = new B;

使用完后BPointer,您应该释放内存并B通过调用来调用的析构函数

delete BPointer;

APointerNULL指针初始化,这意味着它没有指向任何内存区域。取消引用NULL也是未定义的行为。与相似BPointer,应使用有效的对象指针对其进行初始化,然后再发布:

B::B() : APointer(new A(/* lua state pointer */ NULL)) {}
B::~B() { delete APointer; }

如果您不一定需要一个指针,建议您使用堆栈分配B并将其存储A为普通成员(而不是指针)。这样,您就不必担心指针的初始化和删除。

h

class B
{
 public:
    B();
    void eval(int a, int b);
 private:
    A AObject;
};

丙型肝炎

B::B() : AObject(/* lua state pointer */ NULL) {}

void B::eval(int a, int b)
{
    if (a == b) 
    {
        AObject.run();
    }
}

main.cpp

// ...
B b;
b.eval()
// ...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在另一个类构造函数中初始化一个类对象

来自分类Dev

用参数初始化另一个类构造函数中的对象

来自分类Dev

Java:在初始化块中初始化对象时从另一个类调用对象的方法

来自分类Dev

另一个类中的C ++类初始化,出现错误

来自分类Dev

C ++-如何在另一个类中使用私有构造函数实例化对象

来自分类Dev

C#中另一个类的对象

来自分类Dev

Java-试图使用在另一个类中传递给另一个构造函数的参数来初始化对象?

来自分类Dev

从另一个类C ++访问对象

来自分类Dev

从另一个类C ++获取对象的属性

来自分类Dev

Objective-C:在另一个类中调用一个类的属性

来自分类Dev

在C#中“导入”另一个类

来自分类Dev

C ++在另一个类头文件中声明一个类

来自分类Dev

无法从Visual Studio C ++中的另一个类访问一个类

来自分类Dev

C#与另一个类中的一个类的变量进行交互

来自分类Dev

使用另一个类C ++构造一个类

来自分类Dev

从私有void函数c#中的另一个类访问变量

来自分类Dev

如何在C#中从另一个私有类调用私有类变量

来自分类Dev

如何在 C# 中使用来自另一个类的初始化实例对象?

来自分类Dev

另一个类中的参数化对象初始化

来自分类Dev

另一个类中的参数化对象初始化

来自分类Dev

在类中声明属性,该类在C ++中具有另一个类型

来自分类Dev

在另一个类中初始化一个指针

来自分类Dev

初始化变量后在另一个类中构造对象

来自分类Dev

另一个初始化静态c ++类成员

来自分类Dev

如何初始化另一个C#类中的类中的列表以填充列表

来自分类Dev

如何使用继承从C#中的另一个类进行调用和对象

来自分类Dev

同一类的另一个构造函数中的c ++调用构造函数

来自分类Dev

一个文件中的C ++成员类声明。在另一个实施

来自分类Dev

C#/ WPF从另一个类中创建的另一个线程更新UI

Related 相关文章

  1. 1

    在另一个类构造函数中初始化一个类对象

  2. 2

    用参数初始化另一个类构造函数中的对象

  3. 3

    Java:在初始化块中初始化对象时从另一个类调用对象的方法

  4. 4

    另一个类中的C ++类初始化,出现错误

  5. 5

    C ++-如何在另一个类中使用私有构造函数实例化对象

  6. 6

    C#中另一个类的对象

  7. 7

    Java-试图使用在另一个类中传递给另一个构造函数的参数来初始化对象?

  8. 8

    从另一个类C ++访问对象

  9. 9

    从另一个类C ++获取对象的属性

  10. 10

    Objective-C:在另一个类中调用一个类的属性

  11. 11

    在C#中“导入”另一个类

  12. 12

    C ++在另一个类头文件中声明一个类

  13. 13

    无法从Visual Studio C ++中的另一个类访问一个类

  14. 14

    C#与另一个类中的一个类的变量进行交互

  15. 15

    使用另一个类C ++构造一个类

  16. 16

    从私有void函数c#中的另一个类访问变量

  17. 17

    如何在C#中从另一个私有类调用私有类变量

  18. 18

    如何在 C# 中使用来自另一个类的初始化实例对象?

  19. 19

    另一个类中的参数化对象初始化

  20. 20

    另一个类中的参数化对象初始化

  21. 21

    在类中声明属性,该类在C ++中具有另一个类型

  22. 22

    在另一个类中初始化一个指针

  23. 23

    初始化变量后在另一个类中构造对象

  24. 24

    另一个初始化静态c ++类成员

  25. 25

    如何初始化另一个C#类中的类中的列表以填充列表

  26. 26

    如何使用继承从C#中的另一个类进行调用和对象

  27. 27

    同一类的另一个构造函数中的c ++调用构造函数

  28. 28

    一个文件中的C ++成员类声明。在另一个实施

  29. 29

    C#/ WPF从另一个类中创建的另一个线程更新UI

热门标签

归档