Форум: "Прочее";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];
ВнизВ чём ошибка в проекте С++? Найти похожие ветки
← →
Сишник (2006-11-26 03:11) [0]Написал три следующих файла:
1) Main.cpp#include "H.H"
#include <iostream>
using namespace std;
int main()
{
const int kolbooks=3;
char *tavtor, *tname;
int tkol;
card cards[kolbooks];
cout<<"Enter information about books:\n";
for(int t=0;t<kolbooks;t++)
{
cin>>cards[t].avtor;
cin>>cards[t].zagl;
cin>>cards[t].kol;
}
for(t=0;t<kolbooks;t++)
{
cards[t].show;
}
return 0;
}
2) opred.cpp#include "H.H"
#include <iostream.h>
void card::show()
{
cout<<"Avtor: "<<avtor<<endl;
cout<<"Zagolovok: "<<zagl<<endl;
cout<<"Kolichestvo: "<<kol<<endl;
}
void card::store(char *avtor1,char *zagl1, int kol1)
{
avtor=avtor1;
zagl=zagl1;
kol=kol1;
}
3) H.H#ifndef _card_
#define _card_
class card
{
public:
void store(char *avtor1,char *zagl, int kol);
void show();
char *zagl,*avtor;
int kol;
};
#endif
При компиляции ошибок нет, но есть предупреждения:
e:\c++\project10\main.cpp(23) : warning C4551: function call missing argument list
e:\c++\project10\main.cpp(10) : warning C4101: "tkol" : unreferenced local variable
e:\с++\project10\main.cpp(9) : warning C4101: "tname" : unreferenced local variable
e:\c++\project10\main.cpp(9) : warning C4101: "tavtor" : unreferenced local variable
После запуска появляется окно с надписью "Enter information about books:"
после ввода информации и нажатия на кнопку Enter, выскакивает ошибка:
"Main.exe has encountered a problem and needs to close. We are sorry for the inconvenience.
If you were in the middle of something, the information you were working on might be lost.
For more information about this error, click here.
Debug Close"
Как исправить ошибку?..
Задание такое:
Создайте класс card, который поддерживает каталог библиотечных карточек. Этот класс должен сохранять заглавие книги, автора и число экземпляров на руках. Заглавие и автора сохраняете в виде строки символов, а количество экземпляров - в виде целого числа. Используйте общедоступную функцию-член store() для запоминания информации о книгах и общедоступную функцию-член show() для выведения информации на экран. Создать массив из объектов класса card и определить автора и название книги с наибольшим тиражом. В функции main() коротко продемонстрируйте работу созданного класса. Программа должна состоять из нескольких файлов.
← →
Vga © (2006-11-26 03:23) [1]> e:\c++\project10\main.cpp(23) : warning C4551: function
> call missing argument list
Это еще мягко сказано. GCC тебя бы послал "нет такого поля". В С/С++ функция ВСЕГДА (даже когда не имеет аргументов) вызывается со скобками. Так что в 23 строке в main.cpp дописывай скобки.
> e:\c++\project10\main.cpp(10) : warning C4101: "tkol" :
> unreferenced local variable
> e:\с++\project10\main.cpp(9) : warning C4101: "tname" :
> unreferenced local variable
> e:\c++\project10\main.cpp(9) : warning C4101: "tavtor" :
> unreferenced local variable
В дельфи это хинты о неиспользуемых переменных. В int main объявлены tkol, tavtor & tzagl, которые нигде не используются.
← →
Vga © (2006-11-26 03:28) [2]> for(t=0;t<kolbooks;t++)
Надо int t=0, так как обявленная в предыдущем for переменная t только в нем и видна.
← →
Vga © (2006-11-26 03:46) [3]> После запуска появляется окно с надписью "Enter information
> about books:"
> после ввода информации и нажатия на кнопку Enter, выскакивает
> ошибка:
А память под строки за тебя Пушкин выделять будет? Под них надо явно выделить память.
← →
Vga © (2006-11-26 03:54) [4]Есть и другие ошибки, но:
1) Я плохо знаю С++ (а ты явно еще хуже...)
2) Надоело разбираться
← →
SkySpeed (2006-11-26 04:27) [5]Спасибо за помощь!!!
> Vga © (26.11.06 03:28) [2]
> > for(t=0;t<kolbooks;t++)
>
> Надо int t=0, так как обявленная в предыдущем for переменная
> t только в нем и видна.
Если написать int t=0, то будет ошибка: error C2374: "t" : redefinition; multiple initialization
e:\c++\project10\main.cpp(12) : see declaration of "t"
> Vga © (26.11.06 03:46) [3]
> > После запуска появляется окно с надписью "Enter information
>
> > about books:"
> > после ввода информации и нажатия на кнопку Enter, выскакивает
>
> > ошибка:
>
> А память под строки за тебя Пушкин выделять будет? Под них
> надо явно выделить память.
Подскажи плиз, каким образом выделить память под строки? А то не раздуплюсь
> Есть и другие ошибки, но:
> 1) Я плохо знаю С++ (а ты явно еще хуже...)
> 2) Надоело разбираться
С++ начали изучать, начиная только с этого семестра
← →
Zeqfreed © (2006-11-26 10:01) [6]
> Подскажи плиз, каким образом выделить память под строки?
> А то не раздуплюсь
Например, malloc (выделить)/free (освободить). Но, наверное, если этому не учили, то предполагалось, что буферы под строки будут фиксированного размера.
← →
Vga © (2006-11-27 00:02) [7]> Если написать int t=0, то будет ошибка: error C2374: "t"
> : redefinition; multiple initialization
> e:\c++\project10\main.cpp(12) : see declaration of
> "t"
Вот тебе и "стандартный" язык... Такое впечатление, что стандарт ANSI C++ никто из авторов компилеров в глаза не видел.
У тебя какой компилятор? Я проверяю в GCC. Он более-менее стандарту соответствует...
Что до строк - не знаю. Фиксированный буфер char zagl[64] почему-то выдает такую же ошибку.
← →
Vga © (2006-11-27 00:04) [8]> [6] Zeqfreed © (26.11.06 10:01)
Если С++, то скорее zagl=new char[64], хотя не знаю...
← →
Celades © (2006-11-27 00:33) [9]
> #include <iostream.h>
".h" зачем?
где после этого using namespace std;
> cards[t].show;
Это вызов метода!? тогда где "()"?!
> for(t=0;t<kolbooks;t++)
int t=0;
> Вот тебе и "стандартный" язык... Такое впечатление, что
> стандарт ANSI C++ никто из авторов компилеров в глаза не
> видел.
Его не видели те кто пишет ТАКОЙ код.
← →
palva © (2006-11-27 00:53) [10]> Подскажи плиз, каким образом выделить память под строки? А то не раздуплюсь
На самом деле вы строки не используете. Вместо них вы пытаетесь использовать "динамические" массивы символов, как это делается в C. Если бы вы использовали строки, вам бы не понадобилось самому писать выделение памяти под них.
← →
Vga © (2006-11-27 00:54) [11]> [9] Celades © (27.11.06 00:33)
> > Вот тебе и "стандартный" язык... Такое впечатление, что
>
> > стандарт ANSI C++ никто из авторов компилеров в глаза
> не
> > видел.
>
> Его не видели те кто пишет ТАКОЙ код.
Там написано, что КОМПИЛЯТОР не принимает
> > for(t=0;t<kolbooks;t++)
>
> int t=0;
Кроме того, я не раз слышал, что авторы компиляторов стандарт С++ понимают каждый по своему. Например, в книге Александреску список проверенных совместимых компиляторов невелик и широкоизвестных не включает. Хотя говорят его библиотека (Loki вроде) неплохо работает в GCC.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.04 c