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

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

01.02.2013, 14:41. Показов 1790. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Начал читать "Как програмировать на С++" Дейтелов Дошёл до главы "Введение в классы и объекты", Отделение интерфейса от реализации, переписал код в свой компилятор но выдает ошибку "[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;// Показывает успешное завершение программы
}
В чём дело ни как не пойму.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.02.2013, 14:41
Ответы с готовыми решениями:

Почему не компилирует слова по русски, а выводит иероглифы какието? что для этого сделать надо?
Почему не компилирует слова по русски, а выводит иероглифы какието? что для этого сделать надо?

Не пойму, почему не работает
// ConsoleApplication1.cpp: определяет точку входа для консольного приложения. // #include...

Вылетает программа. Не пойму, почему?
Здравствуйте. Написал прогу на С++ - это лаба по ООП. Но она вылетает. Не пойму почему! //...

не пойму почему не идет программа
Дана последовательность из n целых чисел. Определить, все ли числа являются нулевыми или первое...

17
23 / 23 / 3
Регистрация: 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'оф ?
0
2 / 2 / 0
Регистрация: 17.01.2013
Сообщений: 9
01.02.2013, 14:50  [ТС] 3
Цитата Сообщение от vbloodv Посмотреть сообщение
Такая ошибка означает что используется функция которая объявлена, но не определенна !

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

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

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

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

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

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

Ругается у него на те фунцкии, что он использует в main().
Добавлены
0
2273 / 1764 / 741
Регистрация: 27.07.2012
Сообщений: 5,241
01.02.2013, 15:16 9
Попробуй защиту заголовочных файлов.
В самом начале .h-файла напиши:
C++
1
2
#ifndef GRADEBOOK_H
#define GRADEBOOK_H
В самом конце:
C++
1
#endif
0
23 / 23 / 3
Регистрация: 15.12.2012
Сообщений: 314
01.02.2013, 15:16 10
Цитата Сообщение от John Prick Посмотреть сообщение
Ругается у него на те фунцкии, что он использует в main().
У меня больше нет предположений кроме каких-то невероятных:
Но если программа начинает линковаться значит точка входа есть !
Если ругается на функции, но ругается только при линковке, значит файл GraveBook.h находит, но не находить функции.
Остается только одно предположение !
Файл GradeBook.cpp не добавлен в проект и функции не определенны, а компилятор не понимает что компиляция модульная...
0
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
Не помогло.
0
23 / 23 / 3
Регистрация: 15.12.2012
Сообщений: 314
01.02.2013, 15:19 12
Цитата Сообщение от John Prick Посмотреть сообщение
mish@kov, в проект же, надеюсь, все файлы добавлены? GradeBook.cpp и GradeBook.h.
Прошу прощения, я ослеп, не увидел

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


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


Не пойму почему не компилирует
0
2273 / 1764 / 741
Регистрация: 27.07.2012
Сообщений: 5,241
01.02.2013, 15:28 14
Попробуй в другой среде собрать проект.
1
2 / 2 / 0
Регистрация: 17.01.2013
Сообщений: 9
01.02.2013, 15:40  [ТС] 15
Цитата Сообщение от John Prick Посмотреть сообщение
Попробуй в другой среде собрать проект.
Попробую, но позже, Portable версию нашёл только эту, а на рабочий комп больше ни чего не установить.

Добавлено через 7 минут
а кто-нибудь знает хорошие Portable компиляторы?
0
23 / 23 / 3
Регистрация: 15.12.2012
Сообщений: 314
01.02.2013, 15:43 16
Цитата Сообщение от mish@kov Посмотреть сообщение
а кто-нибудь знает хорошие Portable компиляторы?
Попробуй в режиме онлайн проверить http://liveworkspace.org/ - только подряд запиши всё без подключения, хороший компилятор это на вкус, дело привычки, задачи и среды
0
2 / 2 / 0
Регистрация: 17.01.2013
Сообщений: 9
01.02.2013, 21:41  [ТС] 17
На Code::Blocks всё запустилось.
1
2 / 2 / 0
Регистрация: 01.04.2011
Сообщений: 21
13.05.2014, 15:43 18
Знаю, что прошло уже больше года от создания темы, но для тех, кто так же изучает С++ по этой книге, дам решение этой проблемы именно в среде dev c++, без смены IDE. Создаете новый проект, там создастся автоматически файл main.cpp, в него копируете содержимое заглавного файла, затем правой кнопкой по проекту, добавить файл, и так добавляете остальные два файла GradeBook.h и GradeBook.cpp. Все три файла должны находиться в одной папке.
Миниатюры
Не пойму почему не компилирует  
0
13.05.2014, 15:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.05.2014, 15:43
Помогаю со студенческими работами здесь

Не пойму почему функция не переворачивает строку!
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; void reversit(char word); int main()...

Не пойму почему перменная d изменяет значения
// Kursovay_2.cpp: определяет точку входа для консольного приложения. //После выхода из функции...

В общем, не пойму почему криво заполняется массив
#include &quot;stdafx.h&quot; #include &quot;time.h&quot; #include &quot;stdlib.h&quot; int _tmain(int argc, _TCHAR* argv)...

Деление чисел. Ошибка на ровном месте. Не пойму почему.
Пишу задачу, где нужно вычислить простое выражение. И возникает проблема при делении 1 на другие...


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

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

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