c ++, массивы членов класса не содержат своих значений [дубликаты]

0

У меня есть класс под названием opf, который содержит два массива, которые инициализируются в конструкторе. В основном коде я создаю экземпляр opf, называемый curfile, и запускаю его функцию-член testfunc(). Переменная fnum имеет значение just fine для testfunc, но когда я вызываю членов массива ssplit, я получаю огромные целые числа, и я не могу вызвать членов flist, не имея при этом ошибки во время выполнения.

//in main.cpp
int main()
{
   opf curfile;
   curfile.testfunc();
}

//in opf.h
class opf
{
private:
   std::string defpath;
   bool initf;

public:
   opf();
   ~opf();

   std::string flist[9];
   int ssplit[9];
   int fnum;
   std::string path; //path including filename
      std::string filename; //just the filename

   std::vector<std::vector<std::string> > etoken; //(0, std::vector<std::string>(fnum))//all entries  in file

   std::ifstream instream; //read stream
   std::ofstream outstream; //write stream

   bool oread(std::string NIC, std::string year, std::string month);
   void dcache();
   void testfunc();
};

//in opf.c

    opf::opf()
{
   std::string flist[9];
   flist[0] = "Year"; flist[1] = "Month"; flist[2] = "Date";
   flist[3] = "Hour"; flist[4] = "Cell/Subject"; flist[5] = "Issue";
   flist[6] = "Status"; flist[7] = "Comments"; flist[8] = "Completion Date";
   fnum = sizeof(flist)/sizeof(*flist);
   defpath = "\\\\*****************\\User\\TaskTracker\\";
   int ssplit[9];
   ssplit[0] = 4; ssplit[1] = 12; ssplit[2] = 18;
   ssplit[3] = 24; ssplit[4] = 40; ssplit[5] = 80;
   ssplit[6] = 120; ssplit[7] = 145; ssplit[8] = 160;
   initf = true;
   }

opf::~opf(){}

void opf::testfunc()
{
   for(int i = 0; i < 9; i++)
   {
      std::cout << ssplit[i] << " ";
      std::cout << flist[i] << " ";
   }
   return;
}

testfunc печатает следующее:

1853187679 2621539 2002153829 57503856 -2 2001877146 2001876114 0 8558496 завершение вызова после вызова экземпляра 'std :: length_error' what(): basic_string resize

Это приложение попросило Runtime прекратить работу необычным способом.

Любые советы приветствуются...

  • 3
    Я думаю, проблема в том, что вы объявляете локальные переменные с именами, идентичными вашим переменным-членам в конструкторе. По сути, ваши переменные-члены остаются неинициализированными.
  • 0
    Локальные переменные функции имеют приоритет над переменными-членами класса.
Показать ещё 6 комментариев
Теги:
class
arrays

2 ответа

1

Вы объявляете версии ssplit и flist в своем конструкторе, которые flist переменные-члены, поэтому переменные-члены никогда не получают никаких данных, назначенных ему. Просто удалите объявления flist и ssplit от вашего конструктора, чтобы вместо этого вы присваивали значения переменным-членам.

1

массивы, которые вы объявляете в конструкторе, являются локальными для этого конструктора. Вы хотите инициализировать массивы членов вашего класса; просто удалите std::string flist[9]; и int ssplit[9]; от реализации вашего конструктора.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню