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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
cHuVbaka
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 122
#1

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

25.05.2014, 18:00. Просмотров 346. Ответов 4
Метки нет (Все метки)

Ошибки:
Кликните здесь для просмотра всего текста
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]);
}
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2014, 18:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Исправить ошибки компилирования класса (C++):

Исправить ошибки в определении шаблона класса - C++
Подскажите пожалуйста как исправить эту ошибку template &lt;class T&gt; struct A { T x; }; template &lt;class T&gt;

Реализация простейшего класса для сложения двух чисел: найти и исправить ошибки в коде - C++
Всем привет. Только-только начал изучать классы, решил написать свою программу с классом для сложения двух чисел. С ошибками компиляции...

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

Найти причины возникновения ошибок в коде и исправить эти ошибки (динамический массив как поле класса) - C++
когда запускаю, пишет что нет прав доступа для записи в память. если писать без класса, то все работает P.S. использую MVS Express 2015...

Найти ошибки в коде и исправить эти ошибки (Наследование) - C++
Вот в общем 3 файла, изучаю наследование на примере односвязного и двусвязного списков: list.h (inline) #pragma once class list...

Найти ошибки в коде и исправить эти ошибки - C++
Есть у меня вот такой код: #include &lt;iostream&gt; using namespace std; class A{ private: int* a; size_t size_; ...

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

Добавлено через 1 час 11 минут
теперь где-то ошибка в конструкторе...
0
cHuVbaka
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 122
27.05.2014, 17:26  [ТС] #4
ап
0
zss
Модератор
Эксперт С++
6404 / 5970 / 1945
Регистрация: 18.12.2011
Сообщений: 15,400
Завершенные тесты: 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);
};
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2014, 17:43
Привет! Вот еще темы с ответами:

Найти ошибки в коде и исправить эти ошибки - C++ - C++
Судя по вываливающейся ошибки, идет двойное освобождение памяти. У самого не получается отловить откуда. A.h #pragma once ...

Исправить ошибки - C++
Вывести через String. Спасибо заранее. #include &quot;stdafx.h&quot; using namespace System; void main(void) { System::String^St =...

Исправить ошибки - C++
#include&lt;iostream&gt; using namespace std; class empty { setlocale(LC_ALL,&quot;rus_rus.1251&quot;); char*obj_name; public: ...

Исправить ошибки - C++
Помогите пожалуйста исправить следующие ошибки: Ошибка 1: Error 2 error LNK2019: unresolved external symbol &quot;void __cdecl Task_5(struct...


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
27.05.2014, 17:43
Ответ Создать тему
Опции темы

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