【发布时间】: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