2016-08-23 2 views
-4

Я пытаюсь создать автоматически сгенерированный идентификатор в добавлении учеников.AUTO GENERATE ID C++

Так что это мои проблемы:

  • Если я показываю то, что было добавлено, ID_NUM «s все же.
  • Если я заново открою программу, она должна + 1 добавить последний добавленный id_num.

Но я не знаю, что мне следует делать. :(

class moon 
    { 

     int id_num; 
     char name[100]; 
     char course[100]; 
    public: 
     void add; 
    }  

    void alt(); 

    void alt() 
      { 
       system("cls"); 

       char a; 
       moon min; 
       ofstream nimp; 
       nimp.open("moon.dat",ios::binary|ios::app); 
       min.add(); 
       nimp.write(reinterpret_cast <char *> (&min), sizeof(moon)); 
       cin.ignore(); 
       cin.get(); 
       heal.close(); 
       id_num++; 

      } 

     void moon::add() 
    { 

     cout<<"ID NUMBER: "<<id_num<<endl; 
     cin.ignore(); 
     cout<<"Enter course: "; 
     gets(course); 
     cout<<"Enter name: "; 
     gets(name); 
    } 
+3

Ищите ключевое слово static :) – zgrw

+1

Слишком много возможных ответов. Тривиальный: сохранить идентификатор в файле – Garf365

+0

, поэтому я добавил 'static int q;' вне класса или global var. Должен ли я использовать его как идентификатор? это оно? @zgrw –

ответ

1

Вот один из способов:

#include <fstream> 
#include <iostream> 

struct id_generator 
{ 
    id_generator() 
    : _id (0) 
    { 
     std::ifstream ifs("previous_id.txt"); 
     ifs >> _id; 
    } 

    ~id_generator() 
    { 
     std::ofstream ofs("previous_id.txt", std::ios_base::out | std::ios_base::trunc); 
     ofs << _id; 
    } 

    int operator()() { return _id++; } 

    int _id; 
}; 

int main() 
{ 
    id_generator idgen; 

    std::cout << "next id is: " << idgen() << std::endl; 
    std::cout << "next id is: " << idgen() << std::endl; 

    return 0; 
} 

Пример использования:.

$ c++ -o idgen idgen.cpp 
$ idgen 
next id is: 0 
next id is: 1 
$ idgen 
next id is: 2 
next id is: 3 
+0

Спасибо, сэр, но я получаю 'ошибка C2252: '_id': чистый спецификатор может быть указан только для функций'. btw, я в настоящее время использую visual C++ –

+0

@ZayEyes включить флаг -std = C++ 11. или модифицировать код для intialise _id в конструкторе. Инициализация члена - это функция C++ 11. C++ 11 5 лет. Никто больше не должен учиться в среде C++ 03. –

+0

@ ZayEyes Я спас вас от неприятностей. Обновленный пример теперь будет компилироваться в компиляторе C++ 03. –

0

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

Вы не можете сделать это id_num++; в void alt(), потому что это не метод участника moon и id_num является частным лицом этого класса.

Чем вы должны использовать статическую переменную id_num. Вы можете посмотреть here для легкого примера. Я думаю, что лучше понять, если вы можете понять простой пример.