Инициализировать объект класса в ссылочной памяти - PullRequest
0 голосов
/ 02 декабря 2011

Вот суть того, что я пытаюсь сделать.

  • У меня есть достаточно сложная программа, и я хочу организовать ее в набор заголовочных файлов

  • Программа должна хранить большой объект класса в памяти, доступный для всех функций

  • Таким образом, определение класса находится в своем собственном заголовочном файле (поскольку другиезаголовочные файлы используют его независимо друг от друга)

  • Включите установленные мной средства защиты, похоже, работает, поэтому класс определяется только один раз для всего файла

  • Данные самого класса имеют неизвестный размер во время компиляции.Я читаю содержимое файлов данных в структуру, и файл выбирается пользователем во время выполнения

  • Итак, я сначала инициализирую объект класса как пустой, в главномсфера моей программы.Затем я хочу передать указатель на этот вновь созданный экземпляр класса в функцию, которая читает данные файла.

  • Функция чтения файла должна выделять достаточно памяти для хранения всех данных вфайл, а затем записать в память, указанную указателем класса.

  • Я хочу, чтобы набор данных сохранялся в основной области, а не передавался по значению.

Возможно, этот фиктивный код лучше иллюстрирует то, что я хочу сделать.

#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);", которая подсказывает мне, что конструктор класса работает ...

Любые идеи, что я могу делать неправильно?Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 02 декабря 2011
*data_pt = myclass.myclass(size);

не должен компилироваться.

Используйте стандартный класс коллекции библиотек, такой как std::vector, для хранения ваших данных.

1 голос
/ 02 декабря 2011

Пожалуйста, используйте некоторую нормальную коллекцию C ++ STL для хранения таких данных, как list, map или deque. Не пытайтесь каким-то образом притворяться, это просто не стоит.

...