Форум программистов, компьютерный форум CyberForum.ru

Исправить ошибки компилирования класса - C++

Восстановить пароль Регистрация
 
cHuVbaka
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 122
25.05.2014, 18:00     Исправить ошибки компилирования класса #1
Ошибки:
Кликните здесь для просмотра всего текста
1> main.cpp
1>c:\users\gala\documents\visual studio 2010\projects\classbook\classbook\book.h(8): error C2011: book: переопределение типа "class"
1> c:\users\gala\documents\visual studio 2010\projects\classbook\classbook\book.h(8): см. объявление "book"
1>c:\users\gala\documents\visual studio 2010\projects\classbook\classbook\vse.h(13): error C2027: использование неопределенного типа "book"
1> c:\users\gala\documents\visual studio 2010\projects\classbook\classbook\book.h(8): см. объявление "book"
1>c:\users\gala\documents\visual studio 2010\projects\classbook\classbook\vse.h(13): fatal error C1903: не удается восстановить после предыдущих ошибок; остановка компиляции
1> book.cpp
1>c:\users\gala\documents\visual studio 2010\projects\classbook\classbook\book.cpp(6): error C2084: функция "void book::set_old_year(int)" уже имеет текст реализации
1> c:\users\gala\documents\visual studio 2010\projects\classbook\classbook\book.h(20): см. предыдущее определение "set_old_year"
1>c:\users\gala\documents\visual studio 2010\projects\classbook\classbook\book.cpp(10): error C2084: функция "int book::get_old_year(void)" уже имеет текст реализации
1> c:\users\gala\documents\visual studio 2010\projects\classbook\classbook\book.h(19): см. предыдущее определение "get_old_year"
1>c:\users\gala\documents\visual studio 2010\projects\classbook\classbook\book.cpp(14): error C2084: функция "void book::set_author(std::string)" уже имеет текст реализации
1> c:\users\gala\documents\visual studio 2010\projects\classbook\classbook\book.h(21): см. предыдущее определение "set_author"
1>c:\users\gala\documents\visual studio 2010\projects\classbook\classbook\book.cpp(18): error C2084: функция "std::string book::get_author(void)" уже имеет текст реализации
1> c:\users\gala\documents\visual studio 2010\projects\classbook\classbook\book.h(16): см. предыдущее определение "get_author"
1>c:\users\gala\documents\visual studio 2010\projects\classbook\classbook\book.cpp(22): error C2084: функция "void book::set_title(std::string)" уже имеет текст реализации
1> c:\users\gala\documents\visual studio 2010\projects\classbook\classbook\book.h(22): см. предыдущее определение "set_title"
1>c:\users\gala\documents\visual studio 2010\projects\classbook\classbook\book.cpp(26): error C2084: функция "std::string book::get_title(void)" уже имеет текст реализации
1> c:\users\gala\documents\visual studio 2010\projects\classbook\classbook\book.h(17): см. предыдущее определение "get_title"
1>c:\users\gala\documents\visual studio 2010\projects\classbook\classbook\book.cpp(30): error C2084: функция "void book::set_vidav(std::string)" уже имеет текст реализации
1> c:\users\gala\documents\visual studio 2010\projects\classbook\classbook\book.h(23): см. предыдущее определение "set_vidav"
1>c:\users\gala\documents\visual studio 2010\projects\classbook\classbook\book.cpp(34): error C2084: функция "std::string book::get_vidav(void)" уже имеет текст реализации
1> c:\users\gala\documents\visual studio 2010\projects\classbook\classbook\book.h(18): см. предыдущее определение "get_vidav"
1> Создание кода...

Сам Код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
main.cpp
#include <string>
#include <conio.h>
#include "book.h"
#include "vse.h"
#include <iostream>
using namespace std;
book *fill(book *books, int);
int main() 
{
int button=0;
char author[40];
char title [40];
char vidav[40];
int old_year,n;
setlocale(0, "rus");
std::cout <<"Vvedite kolichestvo knig " << std::endl;
std::cin>> n;
vse mas(n):m_n;
fill(books,n);
while(button!=4)
{
std::cout<< "Выберите опцию и нажмите соответсвующую кнопку"<<std::endl;
std::cout << "1.Вывести список книг заданого автора"<<
std::endl;
std::cout << "2.Вывести список книг заданого видавництва" <<std::endl;
std::cout <<"3. Вывести список книг виданого пізніше заданого року" << std::endl;
std::cout <<"4. Выход из программы" << std::endl;
std::cin >> button;
switch(button)
 
{
case 1:
std::cout <<"Введите автора" << std::endl;
std::cin >>author;
mas->vse::find1(books, author, n);
break;
 
 
case 2:
std::cout << "Введите издательство:"<<std::endl;
std::cin >>vidav;
mas->vse::find2(books,vidav,n);
break;
 
 
case 3:
std::cout <<"Введите год:" << std::endl;
std::cin >> old_year;
mas->vse::find3(books,old_year,n);
break;
case 4:
return 0;
break;
}
}
delete [] books;
delete mas;
getch();
 
}
 
book *fill(book *books, int n)
{
std::string author,vidav,title;
int old_year;
for(int i=0; i<n; i++) 
{
std::cout << "\nVvedite\n";
std::cin.get();
std::cout << "Avtor " << i+1 <<": " << std::endl;
std::getline(std::cin,author);
books[i].set_author(author);
std::cout <<"vidav " <<i+1 << ": " << std::endl;
std::cin>> vidav;
books[i].set_vidav(vidav);
std::cout << "year " <<i+1 <<": " << std::endl;
std::cin >> old_year;
books[i].set_old_year(old_year);
std::cout << "Nazva knigi " <<i+1 << ": " << std::endl;
std::cin >> title;
books[i].set_title(title);
}
return books;
}
 
 
 
 
 
 
 
 
 
book.h
#include <string>
#include <iostream>
 
using namespace std;
 
 
class book
{
    string author,title,vidav;
    int old_year ;
 
    
public:
    book (string n,string t,string v, int y,int p):author(n),title(t),vidav(v),old_year(y)
    {};
    string get_author(){return author;}
    string get_title(){return title;}
    string get_vidav(){return vidav;}
    int get_old_year(){return old_year;}
    void set_old_year (int y) { old_year = y;}
    void set_author (string n) { author=n;}
    void set_title (string t) { title = t;}
    void set_vidav (string v) { vidav = v;}
};
     
 
book.cpp
 
#include <string>
#include <iostream>
#include "book.h"
    //------------------------------------------------
void book::set_old_year(int p_old_year)//
 {
 old_year = p_old_year;
 }
int book::get_old_year()
{
return old_year;
}
void book::set_author(std::string p_author) 
{
author = p_author;
}
std::string book::get_author()
{
return author;
}
void book::set_title(std::string p_title)
{
title = p_title;
}
std::string book::get_title()
{
return title;
}
void book::set_vidav( std::string p_vidav) 
{
vidav = p_vidav;
}
std::string book::get_vidav() 
{
return vidav;}
 
    
 
    
 
 
vse.h
#pragma once
#include <string>
#include "book.h"
 
class vse
{
private:
    int m_n;
public:
    vse(int n ):m_n(n)
    {
        
        book *books=new book(m_n);
    };
    ~vse(){};
void dump(book);
void find1(book*,char*,int n);
void find2(book*,char* ,int n);
void find3(book*,int year,int n);
 
 
};
vse.cpp
#include <iostream>
#include <string>
#include "book.h"
#include "vse.h"
    //------------------------------------------------
    // метод вывода на экран элемента массива
    void vse::dump(book objs) 
    {
        std::cout << "Author: "<<objs.get_author() << std::endl 
            << "Vidav: " <<objs.get_vidav() << std::endl 
            << "Year: " <<objs.get_old_year() << std::endl
            << "Nazva" <<objs.get_title() << std::endl;
        
    }
    //------------------------------------------------
    // вывести  автора 
    
void vse::find1(book* books, char author[40], int n)
{
for ( int i=0;i<n;i++)
{
if (books[i].get_author() == author)
this->dump(books[i]);
}
}
//вивести список книг надрукованих пізніше заданого року 
void vse::find3(book* books,int n,int old_year)
{
for (int i=0;i<n;i++)
{
if ((books[i].get_old_year() >= old_year))
this->dump(books[i]);
}
}
//----------------------------------------------------
//список книг заданого видавництва
void vse::find2(book* books, char vidav[40], int n)
{
for ( int i=0;i<n;i++)
{
if (books[i].get_vidav() == vidav)
this->dump(books[i]);
}
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2014, 18:00     Исправить ошибки компилирования класса
Посмотрите здесь:

C++ Исправить ошибки.
C++ Реализация простейшего класса для сложения двух чисел: найти и исправить ошибки в коде
C++ Исправить ошибки
C++ Исправить ошибки
C++ Исправить ошибки
C++ исправить ошибки
Исправить ошибки C++
C++ Исправить ошибки
C++ Исправить ошибки в определении шаблона класса
C++ Найти причины возникновения ошибок в коде и исправить эти ошибки (динамический массив как поле класса)
C++ Найти ошибки в коде и исправить эти ошибки
C++ Найти ошибки в коде и исправить эти ошибки - C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
6050 / 5653 / 1827
Регистрация: 18.12.2011
Сообщений: 14,442
Завершенные тесты: 1
25.05.2014, 19:13     Исправить ошибки компилирования класса #2
ВЫ дважды описали функции в классе book. Первый раз в теле объявления класса,
а второй - в CPP файле.
Поскольку они короткие, то лучше их оставить внутри класса, а из cpp файла удалить.
cHuVbaka
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 122
26.05.2014, 03:31  [ТС]     Исправить ошибки компилирования класса #3
что-то не помогло....те же " переопределение типа "class" "

Добавлено через 1 час 11 минут
теперь где-то ошибка в конструкторе...
cHuVbaka
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 122
27.05.2014, 17:26  [ТС]     Исправить ошибки компилирования класса #4
ап
zss
Модератор
Эксперт С++
 Аватар для zss
6050 / 5653 / 1827
Регистрация: 18.12.2011
Сообщений: 14,442
Завершенные тесты: 1
27.05.2014, 17:43     Исправить ошибки компилирования класса #5
vse(int n ):m_n(n)
{

book *books=new book(m_n);
}
books: Зачем Вам нужен этот локальный указатель. При выходе из конструктора Вы его потеряете.
Кстати, такого конструктора у Вам нет.
vse mas(n):m_n;
Надо
C++
1
vse mas(n);
fill(books,n);
Вы еще не создали объект books
mas->vse::find1(books, author, n);
C++
1
mas.find1(books, author, n);
Аналогично find2 и find3
delete mas;
Не надо. Он создан не динамически.
Ну, и о чем упомянуто раньше
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class book
{
    string author,title,vidav;
    int old_year ;
 
    
public:
    book (string n,string t,string v, int y,int p):author(n),title(t),vidav(v),old_year(y)
    {};
    string get_author();// эти методы Вы реализовли вне объявления
    string get_title();
    string get_vidav();
    int get_old_year();
    void set_old_year (int y);
    void set_author (string n);
    void set_title (string t);
    void set_vidav (string v);
};
Yandex
Объявления
27.05.2014, 17:43     Исправить ошибки компилирования класса
Ответ Создать тему
Опции темы

Текущее время: 12:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru