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

Не пойму почему не компилирует - C++

Восстановить пароль Регистрация
 
mish@kov
2 / 2 / 0
Регистрация: 17.01.2013
Сообщений: 9
01.02.2013, 14:41     Не пойму почему не компилирует #1
Начал читать "Как програмировать на С++" Дейтелов Дошёл до главы "Введение в классы и объекты", Отделение интерфейса от реализации, переписал код в свой компилятор но выдает ошибку "[Linker error] undefined reference to `GradeBook::GradeBook(std::string)' " "[Linker error] undefined reference to `GradeBook::getCourseName()' "
Dev C++ Portable.
Вот код:
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
//Определения элемент-функций GradeBook. Файл содержит
// реализацию функций, прототипы которых объявлены в GradeBook.h
#include <iostream>
using std::cout;
using std::endl;
 
#include "GradeBook.h" //включить определение класса GradeBook
 
   //конструктор инициализирует courseName переданной строкой
   GradeBook::GradeBook ( string name )
   {
       setCourseName ( name ); //инициализировать вызовом set-функции
   } //конец конструктора GradeBook
   
   //Функция для установки названия курса
   void GradeBook::setCourseName( string name )
   {
      courseName = name; // сохранить название курса в объекте
   } //конец функции setCourseName
   
   //функция для получения названия курса
   string GradeBook::getCourseName()
   {
      return courseName;// возвратить coursename объекта
   }
   
   //вывести сообщение приветствие пользователю GradeBook
   void GradeBook::displayMessage()
   {
      //вызвать getCourseName для получения courseName
      cout << "Welcome to the grade book for\n" << getCourseName ()
           << "!" << endl;
   }//конец функции displayMessage
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//Обпределение класса GradeBook файл представляет собой открытый
// интерфейс GradeBook не раскрывая реализации элемент-функций
// класса, которые определяются в GradeBoook.cpp
#include <string> //класс GradeBook использует стандартные строки
using std :: string;
 
      //Определение класса CradeBook
   class GradeBook 
      {
                public: //спецификатор доступа служит указанием на то что фунцкия открыта для публикации
                        GradeBook ( string ); // конструктор, инициализирующий courseName
                        void setCourseName ( string ); // устанавливает courseName
                        string getCourseName (); // получает название курса
                        void displayMessage (); // выводит сообщение приветствие
                private:
                        string courseName; // название курса для данного GradeBook
      }; // конец класса GradeBook
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//Демонстрация класса GradeBook после определения
// его интерфейса
#include <iostream>
using std::cout;
using std::endl;
 
#include "GradeBook.h" // включить определение класса GradeBook
 
//функция main начинает исполнение программы
int main()
{
   // создать два объхекта GradeBook
   GradeBook gradeBook1 ( "CS101 Introduction to C++ Programming" );
   GradeBook gradeBook2 ( "CS102 Data strutures in C++" );
   
   //вывести исходное значение courseName для каждого GradeBook
   cout << "gradeBook1 created for: " << gradeBook1.getCourseName()
        << "\ngradebook2 created for: " << gradeBook2.getCourseName()
        << endl;
   return 0;// Показывает успешное завершение программы
}
В чём дело ни как не пойму.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.02.2013, 14:41     Не пойму почему не компилирует
Посмотрите здесь:

Не пойму почему функция не переворачивает строку! C++
Деление чисел. Ошибка на ровном месте. Не пойму почему. C++
не пойму почему не идет программа C++
Почему не компилирует слова по русски, а выводит иероглифы какието? что для этого сделать надо? C++
C++ Простая прога на использование конструкторов и деструкторов в с++ не работает ( не пойму почему (
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
01.02.2013, 14:47     Не пойму почему не компилирует #2
Такая ошибка означает что используется функция которая объявлена, но не определенна !

Добавлено через 2 минуты
Цитата Сообщение от mish@kov Посмотреть сообщение
GradeBook::GradeBook( string name )
возможно тут надо
C++
1
GradeBook::GradeBook (std::string name )
? т.к. я в верху не вижу namespace'оф ?
mish@kov
2 / 2 / 0
Регистрация: 17.01.2013
Сообщений: 9
01.02.2013, 14:50  [ТС]     Не пойму почему не компилирует #3
Цитата Сообщение от vbloodv Посмотреть сообщение
Такая ошибка означает что используется функция которая объявлена, но не определенна !

Добавлено через 2 минуты

возможно тут надо
C++
1
std::string
? т.к. я в верху не вижу namespace'оф ?
В книге именно так, всё переписал буква в букву.
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
01.02.2013, 15:02     Не пойму почему не компилирует #4
Нет, namespace есть вроде передается при подключении, попробуй комментировать поочередно функции, какая-то из них неправильно определенна...
В книга ошибки встречаются НУ ОЧЕНЬ часто, к тому же переносимость зависит от платформы и компилятора, даже от старости библиотек что компилиться на VS то может некомпилиться на MinGW, и наоборот. Это возникает из-за разной поддержки стандарта... Пробуй комментировать, потому что книга тут не авторитет)) Даже 100% правильную программу лучше пробовать переносить не куском, а по частям.

Добавлено через 10 минут
Цитата Сообщение от mish@kov Посмотреть сообщение
всё переписал буква в букву.
не сомневаюсь в вашей внимательности, дело в компиляторе скорее всего
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
01.02.2013, 15:04     Не пойму почему не компилирует #5
Не знаю, почему не линкует. В MSVS у меня всё успешно собралось.
В качестве отступления, для общего развития:
Цитата Сообщение от mish@kov Посмотреть сообщение
#include "GradeBook.h" // включить определение класса GradeBook
Не определение, а объявление класса. Определение - это реализация, а в этом примере в .h-файле только объявление.

Добавлено через 48 секунд
Цитата Сообщение от vbloodv Посмотреть сообщение
дело в компиляторе скорее всего
Компилятор не при чём. Ошибка линковки.
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
01.02.2013, 15:08     Не пойму почему не компилирует #6
У меня тоже, собралось !
Цитата Сообщение от John Prick Посмотреть сообщение
Компилятор не при чём. Ошибка линковки.
В настройках компилятора, возможно...
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
01.02.2013, 15:12     Не пойму почему не компилирует #7
mish@kov, в проект же, надеюсь, все файлы добавлены? GradeBook.cpp и GradeBook.h.

Добавлено через 43 секунды
Цитата Сообщение от vbloodv Посмотреть сообщение
попробуй комментировать поочередно функции, какая-то из них неправильно определенна..
Ругается у него на те фунцкии, что он использует в main().
mish@kov
2 / 2 / 0
Регистрация: 17.01.2013
Сообщений: 9
01.02.2013, 15:13  [ТС]     Не пойму почему не компилирует #8
Цитата Сообщение от John Prick Посмотреть сообщение
mish@kov, в проект же, надеюсь, все файлы добавлены? GradeBook.cpp и GradeBook.h.

Добавлено через 43 секунды

Ругается у него на те фунцкии, что он использует в main().
Добавлены
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
01.02.2013, 15:16     Не пойму почему не компилирует #9
Попробуй защиту заголовочных файлов.
В самом начале .h-файла напиши:
C++
1
2
#ifndef GRADEBOOK_H
#define GRADEBOOK_H
В самом конце:
C++
1
#endif
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
01.02.2013, 15:16     Не пойму почему не компилирует #10
Цитата Сообщение от John Prick Посмотреть сообщение
Ругается у него на те фунцкии, что он использует в main().
У меня больше нет предположений кроме каких-то невероятных:
Но если программа начинает линковаться значит точка входа есть !
Если ругается на функции, но ругается только при линковке, значит файл GraveBook.h находит, но не находить функции.
Остается только одно предположение !
Файл GradeBook.cpp не добавлен в проект и функции не определенны, а компилятор не понимает что компиляция модульная...
mish@kov
2 / 2 / 0
Регистрация: 17.01.2013
Сообщений: 9
01.02.2013, 15:17  [ТС]     Не пойму почему не компилирует #11
Цитата Сообщение от John Prick Посмотреть сообщение
Попробуй защиту заголовочных файлов.
В самом начале .h-файла напиши:
C++
1
2
#ifndef GRADEBOOK_H
#define GRADEBOOK_H
В самом конце:
C++
1
#endif
Не помогло.
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
01.02.2013, 15:19     Не пойму почему не компилирует #12
Цитата Сообщение от John Prick Посмотреть сообщение
mish@kov, в проект же, надеюсь, все файлы добавлены? GradeBook.cpp и GradeBook.h.
Прошу прощения, я ослеп, не увидел

Добавлено через 2 минуты
mish@kov, проверь пожалуйста еще раз файл GradeBook.cpp. Возможно стоит прикрепить скриншот проекта.
mish@kov
2 / 2 / 0
Регистрация: 17.01.2013
Сообщений: 9
01.02.2013, 15:26  [ТС]     Не пойму почему не компилирует #13
Не пойму почему не компилирует

Не пойму почему не компилирует

Не пойму почему не компилирует
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
01.02.2013, 15:28     Не пойму почему не компилирует #14
Попробуй в другой среде собрать проект.
mish@kov
2 / 2 / 0
Регистрация: 17.01.2013
Сообщений: 9
01.02.2013, 15:40  [ТС]     Не пойму почему не компилирует #15
Цитата Сообщение от John Prick Посмотреть сообщение
Попробуй в другой среде собрать проект.
Попробую, но позже, Portable версию нашёл только эту, а на рабочий комп больше ни чего не установить.

Добавлено через 7 минут
а кто-нибудь знает хорошие Portable компиляторы?
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
01.02.2013, 15:43     Не пойму почему не компилирует #16
Цитата Сообщение от mish@kov Посмотреть сообщение
а кто-нибудь знает хорошие Portable компиляторы?
Попробуй в режиме онлайн проверить http://liveworkspace.org/ - только подряд запиши всё без подключения, хороший компилятор это на вкус, дело привычки, задачи и среды
mish@kov
2 / 2 / 0
Регистрация: 17.01.2013
Сообщений: 9
01.02.2013, 21:41  [ТС]     Не пойму почему не компилирует #17
На Code::Blocks всё запустилось.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2014, 15:43     Не пойму почему не компилирует
Еще ссылки по теме:

C++ Немного изменил код программы и она перестала работать. Не пойму почему.
C++ Не пойму почему перменная d изменяет значения
C++ В общем, не пойму почему криво заполняется массив

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

Или воспользуйтесь поиском по форуму:
Viperous
 Аватар для Viperous
2 / 2 / 0
Регистрация: 01.04.2011
Сообщений: 21
13.05.2014, 15:43     Не пойму почему не компилирует #18
Знаю, что прошло уже больше года от создания темы, но для тех, кто так же изучает С++ по этой книге, дам решение этой проблемы именно в среде dev c++, без смены IDE. Создаете новый проект, там создастся автоматически файл main.cpp, в него копируете содержимое заглавного файла, затем правой кнопкой по проекту, добавить файл, и так добавляете остальные два файла GradeBook.h и GradeBook.cpp. Все три файла должны находиться в одной папке.
Миниатюры
Не пойму почему не компилирует  
Yandex
Объявления
13.05.2014, 15:43     Не пойму почему не компилирует
Ответ Создать тему
Опции темы

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