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

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

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

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

22.01.2014, 08:08. Просмотров 629. Ответов 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;
}


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

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

Ошибка при использовании gets() - C++
Не могу понять, почему при второй итерации цикла программа выдает ошибку и закрывается при запросе фамилии. #include &quot;stdafx.h&quot; ...

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

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

Ошибка при использовании вектора - C++
Пытаюсь проанализировать текстовый файл и посчитать кол-во каждого символа. Текст на английском. Вот код: class Raspredelenie{ ...

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

19
solar_wind
757 / 748 / 42
Регистрация: 06.07.2009
Сообщений: 2,970
Завершенные тесты: 1
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
Isenos
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
alsav22
5426 / 4821 / 442
Регистрация: 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
MrGluck
Модератор
Эксперт CЭксперт С++
7491 / 4606 / 692
Регистрация: 29.11.2010
Сообщений: 12,592
22.01.2014, 17:13 #5
Цитата Сообщение от solar_wind Посмотреть сообщение
замени на
GradeBook( string name);
*void setCourseName( string name );
имена в прототипах никакого смысла для компилятора не несут. Они используются лишь для наглядности и удобочитаемости людьми.

Добавлено через 36 секунд
Цитата Сообщение от alsav22 Посмотреть сообщение
А как Дейтелы относятся к вставке using namespace std в середину других инклудов?
Как в анекдоте - Дейтелы к этому не относятся.
1
Isenos
0 / 0 / 0
Регистрация: 22.01.2014
Сообщений: 7
29.01.2014, 19:21  [ТС] #6
Цитата Сообщение от alsav22 Посмотреть сообщение
А как Дейтелы относятся к вставке using namespace std в середину других инклудов?
В целом, вставлять using между include'ами не стесняются.
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.01.2014, 19:24 #7
Цитата Сообщение от Isenos Посмотреть сообщение
В целом, вставлять using между include'ами не стесняются.
Страница в книге?
0
Isenos
0 / 0 / 0
Регистрация: 22.01.2014
Сообщений: 7
30.01.2014, 04:58  [ТС] #8
Цитата Сообщение от alsav22 Посмотреть сообщение
Страница в книге?
На 332 - ближнее, что помню. За остальным нужно пролистывать назад.
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.01.2014, 18:11 #9
Цитата Сообщение от Isenos Посмотреть сообщение
На 332 - ближнее, что помню.
Это какое издание? Если нетрудно, скрин страницы с кодом выложите.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7491 / 4606 / 692
Регистрация: 29.11.2010
Сообщений: 12,592
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
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.01.2014, 20:21 #11
Цитата Сообщение от MrGluck Посмотреть сообщение
Так что скорее всего, using namespace std; - "ложь и провокация".
Мне тоже так кажется. Скорее всего, ТС спутал using-директиву с using-объявлением.
1
Isenos
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
zss
Модератор
Эксперт С++
6532 / 6094 / 2007
Регистрация: 18.12.2011
Сообщений: 15,854
Завершенные тесты: 1
01.02.2014, 10:10 #14
Не понял, решена ли проблема.
По моему причина в том, что автор не включил в единый проект
оба .cpp файла.
0
alsav22
01.02.2014, 10:18     Ошибка при использовании подключённых .h и .cpp компонентов
  #15

Не по теме:

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

1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2014, 10:18
Привет! Вот еще темы с ответами:

Ошибка при использовании size_t - C++
Выдает много ошибок связанные с использованием typedef std::size_t size_type; #include &lt;iostream&gt; #include &lt;cstring&gt; #include...

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

Ошибка при использовании 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(),...

Ошибка при использовании delete - C++
И снова здравствуйте! Пишу раз третий.Я уже готов убицца ап сцену изза этого delete.Я не понимаю что не так делаю: class CMenu { ...


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

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

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