【问题标题】:Initialize Class Object to Referenced Memory将类对象初始化为引用的内存
【发布时间】:2011-12-02 03:17:44
【问题描述】:

这是我想要做的事情的要点。

  • 我有一个足够复杂的程序,我想将它组织成一组头文件

  • 程序需要在内存中保留一个大类对象,供所有函数使用

  • 因此类定义在它自己的头文件中(因为其他头文件独立使用它)

  • 我设置的包含保护似乎正在工作,因此该类只为整个文件定义一次

  • 类数据本身在编译时大小未知。我正在将数据文件的内容读入结构中,并且文件由用户在运行时选择

  • 所以,我首先将类对象初始化为空,在我的程序的主要范围内。然后,我想将指向这个新创建的类实例的指针传递给读取文件数据的函数。

  • 文件读取函数应分配足够的内存以包含文件中的所有数据,然后写入类指针所指的内存。

  • 我希望数据集保存在主范围内,而不是按值传递。

也许这个虚拟代码会更好地说明我想要做什么。

#include <class_def.h>
#include <readfile.h>
#include <otherfunctions.h> // Will perform a calculation based on class data in memory

myclass data;

int main()
{
    read_to_memory(&data);
    some_other_function(&data);
}

--------------------

int read_to_memory(myclass* data_pt) // Function from readfile.h
{
    // Get filename from user input
    // Determine filesize, from which the size of class members is derived
    // Then initialize class object referred to by data_pt
    *data_pt = myclass.myclass(size);

    // Then, start writing to memory with file data
    // Is actually a big "for" loop
    (*data_pt).member1[0] = <value read from file>;
    (*data_pt).member2[0] = <value read from file>;
    ...
    (*data_pt).member1[N] = <value read from file>;
    (*data_pt).member2[N] = <value read from file>;
}

现在,当我尝试从 read_into_memory 函数访问类成员时遇到了段错误。尝试读取

cout << (*data_pt).member1[0]) 

还是写

(*data_pt).member1[0] = <value read from file>;

这样做。但是,崩溃确实发生在以下行之后:“*data_pt = myclass.myclass(size);”,这表明类构造函数正在工作......

任何想法我可能做错了什么?提前致谢!

【问题讨论】:

  • 你需要展示myclass的代码。

标签: c++ class pointers reference initialization


【解决方案1】:
*data_pt = myclass.myclass(size);

不应编译。

使用诸如std::vector 之类的标准库集合类来保存您的数据。

【讨论】:

    【解决方案2】:

    请使用一些合理的 C++ STL 集合来保存数据,例如 listmapdeque。不要试图以某种方式伪造它,这不值得。

    【讨论】:

      猜你喜欢
      • 2013-07-27
      • 2017-12-09
      • 2018-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-28
      相关资源
      最近更新 更多