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

Ошибка при использовании подключённых .h и .cpp компонентов - C++

Восстановить пароль Регистрация
 
Isenos
0 / 0 / 0
Регистрация: 22.01.2014
Сообщений: 7
22.01.2014, 08:08     Ошибка при использовании подключённых .h и .cpp компонентов #1
Доброго времени суток.

Некоторое время назад начал изучать C++ по 5-му изданию книги Дейтелов. Всё спокойно получалось, пока не дошёл до задания в главе 3.9, где созданный ранее хедер нужно разделить на .h с прототипами элемент-функций и .cpp с самими функциями.

Сколько ни бился, при сборке выдаёт вот такие ошибки:

C++\3\main.cpp|9|undefined reference to `GradeBook::GradeBook(std::string)'|
C++\3\main.cpp|10|undefined reference to `GradeBook::GradeBook(std::string)'|
C++\3\main.cpp|12|undefined reference to `GradeBook::getCourseName()'|
C++\3\main.cpp|12|undefined reference to `GradeBook::getCourseName()'|
Собственно, коды:
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
using namespace std;
 
#include "GradeBook.h"
 
int main()
{
   GradeBook gradeBook1("IS-13");
   GradeBook gradeBook2("IE-13");
 
   cout << "GradeBook 1: " << gradeBook1.getCourseName() << "\nGradeBook2:" << gradeBook2.getCourseName();
 
   return 0;
}

GradeBook.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <string>
 
using namespace std;
 
class GradeBook
{
public:
   GradeBook( string );
   void setCourseName( string );
   string getCourseName();
   void displayMessage();
private:
   string courseName;
};

GradeBook.cpp
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
#include <iostream>
 
using namespace std;
 
#include "GradeBook.h"
 
 
 
GradeBook::GradeBook( string name )
{
   setCourseName( name );
}
 
void GradeBook::displayMessage()
{
   cout << "Welcome to\n" << getCourseName() << "\nGradeBook!" << endl;
}
 
void GradeBook::setCourseName( string name )
{
   courseName = name;
}
 
string GradeBook::getCourseName()
{
   return courseName;
}


Просьба помочь с решением проблемы =(
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2014, 08:08     Ошибка при использовании подключённых .h и .cpp компонентов
Посмотрите здесь:

C++ ошибка при использовании delete
Ошибка в коде при использовании класов C++
Ошибка при использовании конструктора C++
Ошибка при использовании STL C++
Ошибка при использовании вектора C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
solar_wind
 Аватар для solar_wind
740 / 731 / 39
Регистрация: 06.07.2009
Сообщений: 2,937
Завершенные тесты: 1
22.01.2014, 08:15     Ошибка при использовании подключённых .h и .cpp компонентов #2
C++
1
2
GradeBook( string );
void setCourseName( string );
замени на
C++
1
2
GradeBook( string name);
 void setCourseName( string name );
может ему это не нравится, остальное на первый взгляд вроде бы нормально.
Isenos
0 / 0 / 0
Регистрация: 22.01.2014
Сообщений: 7
22.01.2014, 10:05  [ТС]     Ошибка при использовании подключённых .h и .cpp компонентов #3
Цитата Сообщение от solar_wind Посмотреть сообщение
Кликните здесь для просмотра всего текста
C++
1
2
GradeBook( string );
void setCourseName( string );
замени на
C++
1
2
GradeBook( string name);
 void setCourseName( string name );
может ему это не нравится, остальное на первый взгляд вроде бы нормально.
К сожалению, уже пробовал - не помогает.

Добавлено через 8 минут
Исправил ошибку сам.

Как оказалось, при добавлении/создании в проекте Code::Blocks (использую версию 10.05) новых компонентов обязательно нужно отмечать галочками цель их применения (Debug и/или Release версия).
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.01.2014, 16:31     Ошибка при использовании подключённых .h и .cpp компонентов #4
Цитата Сообщение от Isenos Посмотреть сообщение
Некоторое время назад начал изучать C++ по 5-му изданию книги Дейтелов.
А как Дейтелы относятся к вставке using namespace std в середину других инклудов?
C++
1
2
3
4
5
#include <iostream>
 
using namespace std;
 
#include "GradeBook.h"
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,399
22.01.2014, 17:13     Ошибка при использовании подключённых .h и .cpp компонентов #5
Цитата Сообщение от solar_wind Посмотреть сообщение
замени на
GradeBook( string name);
*void setCourseName( string name );
имена в прототипах никакого смысла для компилятора не несут. Они используются лишь для наглядности и удобочитаемости людьми.

Добавлено через 36 секунд
Цитата Сообщение от alsav22 Посмотреть сообщение
А как Дейтелы относятся к вставке using namespace std в середину других инклудов?
Как в анекдоте - Дейтелы к этому не относятся.
Isenos
0 / 0 / 0
Регистрация: 22.01.2014
Сообщений: 7
29.01.2014, 19:21  [ТС]     Ошибка при использовании подключённых .h и .cpp компонентов #6
Цитата Сообщение от alsav22 Посмотреть сообщение
А как Дейтелы относятся к вставке using namespace std в середину других инклудов?
В целом, вставлять using между include'ами не стесняются.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.01.2014, 19:24     Ошибка при использовании подключённых .h и .cpp компонентов #7
Цитата Сообщение от Isenos Посмотреть сообщение
В целом, вставлять using между include'ами не стесняются.
Страница в книге?
Isenos
0 / 0 / 0
Регистрация: 22.01.2014
Сообщений: 7
30.01.2014, 04:58  [ТС]     Ошибка при использовании подключённых .h и .cpp компонентов #8
Цитата Сообщение от alsav22 Посмотреть сообщение
Страница в книге?
На 332 - ближнее, что помню. За остальным нужно пролистывать назад.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.01.2014, 18:11     Ошибка при использовании подключённых .h и .cpp компонентов #9
Цитата Сообщение от Isenos Посмотреть сообщение
На 332 - ближнее, что помню.
Это какое издание? Если нетрудно, скрин страницы с кодом выложите.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,399
30.01.2014, 19:06     Ошибка при использовании подключённых .h и .cpp компонентов #10
alsav22, вот нашел, начиная с 5 издания 2008 года. Это мы старперы, изучали еще по книге, где пространства имен еще нет, используют iostream.h и main без инта.
Ошибка при использовании подключённых .h и .cpp компонентов

Однако, я не поленился и нашел вот это:
Ошибка при использовании подключённых .h и .cpp компонентов

Так что скорее всего, using namespace std; - "ложь и провокация". Дейтелы советуют использовать using std::cout, using std::cin, ...
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.01.2014, 20:21     Ошибка при использовании подключённых .h и .cpp компонентов #11
Цитата Сообщение от MrGluck Посмотреть сообщение
Так что скорее всего, using namespace std; - "ложь и провокация".
Мне тоже так кажется. Скорее всего, ТС спутал using-директиву с using-объявлением.
Isenos
0 / 0 / 0
Регистрация: 22.01.2014
Сообщений: 7
01.02.2014, 04:42  [ТС]     Ошибка при использовании подключённых .h и .cpp компонентов #12
Забавные вы =)

Хочу напомнить, что проблема решена ещё на прошлой странице, и проблема заключалась вовсе не в коде программы.

А что касается "using namespace std" - это решение, предложенное компилятором. И при компиляции вызывающее чуть менее, чем 0 ошибок =)
alsav22
01.02.2014, 09:54
  #13

Не по теме:

Цитата Сообщение от Isenos Посмотреть сообщение
Забавные вы =)
Это вы забавный. Ещё не поняли, что разговор идёт не по вопросу темы.
Цитата Сообщение от Isenos Посмотреть сообщение
А что касается "using namespace std" - это решение, предложенное компилятором.
Решение поместить using namespace std в середину инклудов? Интересно узнать, как он это сделал.
Цитата Сообщение от Isenos Посмотреть сообщение
И при компиляции вызывающее чуть менее, чем 0 ошибок =)
Говорите о том, чего не знаете, и вводите людей в заблуждение насчёт Дейтелов. Скрин страницы так и не выложили? Сказать почему?

zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
01.02.2014, 10:10     Ошибка при использовании подключённых .h и .cpp компонентов #14
Не понял, решена ли проблема.
По моему причина в том, что автор не включил в единый проект
оба .cpp файла.
alsav22
01.02.2014, 10:18
  #15

Не по теме:

Цитата Сообщение от zss Посмотреть сообщение
Не понял, решена ли проблема.
Цитата Сообщение от Isenos Посмотреть сообщение
Хочу напомнить, что проблема решена ещё на прошлой странице,
3 пост.

Isenos
02.02.2014, 08:37  [ТС]
  #16

Не по теме:

Цитата Сообщение от alsav22 Посмотреть сообщение
Сказать почему?
Удиви меня.

alsav22
02.02.2014, 10:34
  #17

Не по теме:

Цитата Сообщение от Isenos Посмотреть сообщение
Удиви меня.
Ты меня удиви. Покажи это у Дейтелов:
Цитата Сообщение от alsav22 Посмотреть сообщение
А как Дейтелы относятся к вставке using namespace std в середину других инклудов?

Isenos
02.02.2014, 15:25  [ТС]
  #18

Не по теме:

А я разве говорил это конкретно про

namespace std
?
Специально подчёркивал, в целом. А за этим "в целом" листай 5-6 главы.

MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,399
02.02.2014, 15:59     Ошибка при использовании подключённых .h и .cpp компонентов #19
Цитата Сообщение от Isenos Посмотреть сообщение
А за этим "в целом" листай 5-6 главы
Не поленился, внимательно пролистал 5-6 главу. Ни одной using директивы, сплошные using объявления.
Это две разные языковые конструкции.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.02.2014, 22:24     Ошибка при использовании подключённых .h и .cpp компонентов
Еще ссылки по теме:

Ошибка при использовании new[] / delete[] C++
C++ Ошибка при использовании %
C++ Ошибка при использовании reverse_iterator

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

Или воспользуйтесь поиском по форуму:
alsav22
02.02.2014, 22:24     Ошибка при использовании подключённых .h и .cpp компонентов
  #20

Не по теме:

Цитата Сообщение от Isenos Посмотреть сообщение
А я разве говорил это конкретно про namespace std
Про что ты говорил я вижу. А про что я спрашивал ты видишь?
Цитата Сообщение от alsav22 Посмотреть сообщение
А как Дейтелы относятся к вставке using namespace std в середину других инклудов?
C++
1
2
3
#include <iostream>
using namespace std;
#include "GradeBook.h"
Вопрос был по конкретному куску твоего кода, с такой вставкой.

Yandex
Объявления
02.02.2014, 22:24     Ошибка при использовании подключённых .h и .cpp компонентов
Ответ Создать тему
Опции темы

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