Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1164309547
Kolan
2006-11-23 22:19
2006.12.17
Под какие цели искать сотрудников.


15-1164713269
leksNov
2006-11-28 14:27
2006.12.17
Помогите!!!


11-1139762040
ElDev
2006-02-12 19:34
2006.12.17
В компоненте MHMonthCalendar не работает событие OnChange


2-1164761542
Alek Aaz
2006-11-29 03:52
2006.12.17
Сравнить два массива


15-1163315217
SergP
2006-11-12 10:06
2006.12.17
ICQ-сервер. Где взять?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский