Здравствуйте, sar_ultima, Вы писали:
_>>> return p*; // <--- подозреваю, что вот здесь _>>>}
_>А что здесь не так? Возвращать же что-то надо в место вызова функции?
Ну, если из (Kniga * p) надо сделать (Kniga **), то как минимум надо писать так:
return &p;
Но вообще непонятно, зачем тебе возвращать (Kniga **) в функции вывода инфы на экран.
PS. С Дельфи слезаешь?
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Re: Здравствуйте. Помогите новичку понять, где в коде ошибка
Будем учиться хорошему стилю, который — залог безошибочности.
(Впрочем, если у тебя старый компилятор, например, TurboC++, то увы, этот совет мимо кассы).
_>
_>#include <iostream> // <iostream.h> - это древняя версия потоков; её использовать не стоит!
_>#include <string> // <string.h> - сишные примитивы (strcpy и т.п.); мы же воспользуемся С++ным классом
_>// #include<windows.h> - а это нам просто не нужно#include <vector> // а вот это нам пригодится для коллекций книг
_>struct Kniga{ // почему в комментарии "BOOK", а в коде "Kniga"? ;)
_> std::string nazvanie; // используем правильные строки!
_> struct {
_> std::string imya;
_> std::string familiya;
_> }avtor;
_> double cena; // хранить деньги с плавающей точкой - сойдёт для сельской местности...
_> int stranic; // не экономь на спичках; int удобнее для компилятора, чем short
_>};
typedef std::vector<Kniga> KnigaVector;
// как сокращаются прототипы! нет нужды таскать двойные указатели...
// кстати, возвращать void - это так естественно!
_>void NovKat(KnigaVector& knigi); // возвращаем данные через out-параметр (можно и через return)
_>void InfoOKnige(Kniga const& kniga);
_>void VivodNaEkran(KnigaVector const& knigi);
using std::cout;
using std::cin;
// или просто using namespace std;
// подробнее об этом - в любом учебнике по С++
_>void main()
_>{
_> KnigaVector knigi; // вместо Kniga** p и int n
_> int vibor;
_> while(1){
_> system("cls");
_> cout << "\t\tMenu: " << "\n";
_> cout << "1 - Sozdat novuyu biblioteky. \n";
_> cout << "6 - Vivod na ekran. \n";
_> cin >> vibor;
_> switch(vibor){
_> case 1: p=NovKat(p, n); break;
_> case 6: p=VivodNaEkran(p, n);break;
_> default:
_> cout << "Vnimatel'nee. Imeetsa tol'ko 6 punktov menu.";
// 6 пунктов?! я вижу только 2. Кстати, где пункт завершения работы?
_> }
_> }
_>}
_>///////////////////////////////////////////////Создание нового каталога
_>void NovKat(KnigaVector& knigi)
_>{
_> system ("cls");
_> knigi.clear(); // if (p!=NULL) delete []p; --- посмотри, как удобно с вектором!
_> cout << "Vvedite kolichesstvo knig: ";
int n;
_> cin >> n;
_> knigi.resize[n]; // p=new Kniga*[n];
/* // управление памятью на таком низком уровне не нужно;
// кстати, даже new должен бросить исключение, т.е. мы просто не дошли бы до проверки
// хотя старые компиляторы имеют на этот счёт особое мнение :(
_> if(p==NULL)
_> {
_> cout <<"Oshibka pamyati!!!";
_> return NULL;
_> }
*/
_> for (int i=0; i<n; i++)
_> {
_> // p[i]=new Kniga; --- в коллекции хранятся объекты, а не указатели
_> cout << "Kniga nomer "<< i+1<< "\n\n";
_> InfoOKnige(p[i]);
_> }
_>}
// переделать остальные функции - хозяйское дело.
_>
_>
Добавлена разметка и поправлена табуляция — Кодт
Перекуём баги на фичи!
Re: Здравствуйте. Помогите новичку понять, где в коде ошибка
Я бы еще добавил, ко всему прочему, что не следует называть переменные, функции и типы русскими словами. Это очень плохая привычка. Будьте готовы к тому, что придется работать в многоязычной команде и используйте для идентификаторов английские слова.