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

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

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

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

22.01.2014, 08:08. Просмотров 573. Ответов 19
Метки нет (Все метки)

Доброго времени суток.

Некоторое время назад начал изучать 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 компонентов
Посмотрите здесь:

Ошибка при использовании reverse_iterator - C++
std::array&lt;int, 7&gt; m = { 1, 2, 3, 4, 5, 6, 7 }; vector&lt;int&gt; v(m.begin(), m.end()); vector&lt;int&gt;::iterator pos = find(v.begin(),...

Ошибка при использовании override - C++
Здравствуйте, форумчане, столкнулся с проблемой при использовании override: есть абстрактный класс с чистой виртуальной функцией move,...

Ошибка при использовании STL - C++
Начал знакомиться с STL, и возникли проблемы. Вот суть: Имеется дочерний класс, одно поле которого является динамическим массивом. При...

Ошибка при использовании SendKeys - C++
При нажатии на button5 окно программы должно свернуться и в окне, которое было позади него (блокнот), написать &quot;Hello world&quot;: #pragma...

Ошибка C2678 при использовании set_intersection - C++
Необходимо из двух multiset вывести совпадающие строки Написал такой код, но выдает ошибку #include &quot;stdafx.h&quot; #include &lt;vector&gt; ...

Ошибка при использовании дружественной функции - C++
Доброго времени суток! Не могу понять, в строках 17 и 20 пишет, что член hate, объявленный в строке 8 недоступен Подскажите, в чем...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
solar_wind
756 / 747 / 42
Регистрация: 06.07.2009
Сообщений: 2,969
Завершенные тесты: 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
5416 / 4812 / 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
Модератор
Эксперт CЭксперт С++
7148 / 4314 / 629
Регистрация: 29.11.2010
Сообщений: 11,730
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
5416 / 4812 / 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
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.01.2014, 18:11     Ошибка при использовании подключённых .h и .cpp компонентов #9
Цитата Сообщение от Isenos Посмотреть сообщение
На 332 - ближнее, что помню.
Это какое издание? Если нетрудно, скрин страницы с кодом выложите.
MrGluck
Модератор
Эксперт CЭксперт С++
7148 / 4314 / 629
Регистрация: 29.11.2010
Сообщений: 11,730
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
5416 / 4812 / 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
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,181
Завершенные тесты: 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
Модератор
Эксперт CЭксперт С++
7148 / 4314 / 629
Регистрация: 29.11.2010
Сообщений: 11,730
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 компонентов
Еще ссылки по теме:

Ошибка при использовании функции-члена - C++
Доброго времени суток! При использовании функции-члена print() с объектом класса bin_image , созданом конструктором по умолчанию...

Ошибка при использовании vector<bool> - C++
Текст ошибки (Visual studio 2013): Ошибка 2 error C2440: return: невозможно преобразовать...

Ошибка в коде при использовании класов - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;time.h&gt; #include &lt;stdio.h&gt; using namespace std; class Hello { int money,...

Ошибка при использовании Switch - case - C++
вообщем в одном из case у меня читается из файла и записывается в массив структур, там же определяется и инициализируется несколько...


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

Или воспользуйтесь поиском по форуму:
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 компонентов
Ответ Создать тему
Опции темы

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