0 / 0 / 0
Регистрация: 22.01.2014
Сообщений: 7
1

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

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

Author24 — интернет-сервис помощи студентам
Доброго времени суток.

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


Просьба помочь с решением проблемы =(
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.01.2014, 08:08
Ответы с готовыми решениями:

Библиотеки в CPP. Ошибка компиляции | CPP
Доброго вечера! Появился один вопросик недавно. Начал юзать библиотеку &lt;windows.h&gt; для...

Ошибка при использовании vector (в конце, после вывода результатов выскакивает ошибка, но сам результат коректен)
Суть в следующем, мы считываем введеные значения и выводим этот массив Проблема такова что...

Ошибка при использовании %
(условие задачи, код и ошибки при коомпиляции на скрине) Здравствуйте, задача простая, как и ее...

Ошибка при использовании gets()
Не могу понять, почему при второй итерации цикла программа выдает ошибку и закрывается при запросе...

19
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
22.01.2014, 08:15 2
C++
1
2
GradeBook( string );
void setCourseName( string );
замени на
C++
1
2
GradeBook( string name);
 void setCourseName( string name );
может ему это не нравится, остальное на первый взгляд вроде бы нормально.
0
0 / 0 / 0
Регистрация: 22.01.2014
Сообщений: 7
22.01.2014, 10:05  [ТС] 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 версия).
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
22.01.2014, 16:31 4
Цитата Сообщение от Isenos Посмотреть сообщение
Некоторое время назад начал изучать C++ по 5-му изданию книги Дейтелов.
А как Дейтелы относятся к вставке using namespace std в середину других инклудов?
C++
1
2
3
4
5
#include <iostream>
 
using namespace std;
 
#include "GradeBook.h"
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
22.01.2014, 17:13 5
Цитата Сообщение от solar_wind Посмотреть сообщение
замени на
GradeBook( string name);
*void setCourseName( string name );
имена в прототипах никакого смысла для компилятора не несут. Они используются лишь для наглядности и удобочитаемости людьми.

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


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


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

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

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

Не по теме:

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

0
Модератор
Эксперт С++
13496 / 10751 / 6406
Регистрация: 18.12.2011
Сообщений: 28,687
01.02.2014, 10:10 14
Не понял, решена ли проблема.
По моему причина в том, что автор не включил в единый проект
оба .cpp файла.
0
alsav22
01.02.2014, 10:18
  #15

Не по теме:

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

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

Не по теме:

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

0
alsav22
02.02.2014, 10:34
  #17

Не по теме:

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

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

Не по теме:

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

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

0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
02.02.2014, 15:59 19
Цитата Сообщение от Isenos Посмотреть сообщение
А за этим "в целом" листай 5-6 главы
Не поленился, внимательно пролистал 5-6 главу. Ни одной using директивы, сплошные using объявления.
Это две разные языковые конструкции.
0
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"
Вопрос был по конкретному куску твоего кода, с такой вставкой.

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.02.2014, 22:24

Ошибка при использовании new[] / delete[]
Здравствуйте. Пишу учебную программу, моделирующую движение лифта (если кто учебник Дейтелов читал,...

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

Ошибка при использовании write()
Ребят есть код, запись информации в файл. #include &lt;stdio.h&gt; #include &lt;string&gt; #include...

Ошибка при использовании memcpy
При использовании функции memcpy возникает ошибка typedef struct _xJSRdGWtWnLjwW2w { void*...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru