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

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

Войти
Регистрация
Восстановить пароль
 
 
mish@kov
2 / 2 / 0
Регистрация: 17.01.2013
Сообщений: 9
#1

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

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

Начал читать "Как програмировать на С++" Дейтелов Дошёл до главы "Введение в классы и объекты", Отделение интерфейса от реализации, переписал код в свой компилятор но выдает ошибку "[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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.02.2013, 14:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не пойму почему не компилирует (C++):

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

Не пойму, почему не работает - C++
// ConsoleApplication1.cpp: определяет точку входа для консольного приложения. // #include &quot;stdafx.h&quot; #include&lt;stdio.h&gt; ...

Вылетает программа. Не пойму, почему? - C++
Здравствуйте. Написал прогу на С++ - это лаба по ООП. Но она вылетает. Не пойму почему! // объявление класса Date #include &lt;iostream&gt; ...

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

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

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

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

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

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

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

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

Добавлено через 43 секунды
Цитата Сообщение от vbloodv Посмотреть сообщение
попробуй комментировать поочередно функции, какая-то из них неправильно определенна..
Ругается у него на те фунцкии, что он использует в main().
0
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().
Добавлены
0
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 3
01.02.2013, 15:16 #9
Попробуй защиту заголовочных файлов.
В самом начале .h-файла напиши:
C++
1
2
#ifndef GRADEBOOK_H
#define GRADEBOOK_H
В самом конце:
C++
1
#endif
0
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
01.02.2013, 15:16 #10
Цитата Сообщение от John Prick Посмотреть сообщение
Ругается у него на те фунцкии, что он использует в main().
У меня больше нет предположений кроме каких-то невероятных:
Но если программа начинает линковаться значит точка входа есть !
Если ругается на функции, но ругается только при линковке, значит файл GraveBook.h находит, но не находить функции.
Остается только одно предположение !
Файл GradeBook.cpp не добавлен в проект и функции не определенны, а компилятор не понимает что компиляция модульная...
0
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
Не помогло.
0
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. Возможно стоит прикрепить скриншот проекта.
0
mish@kov
2 / 2 / 0
Регистрация: 17.01.2013
Сообщений: 9
01.02.2013, 15:26  [ТС] #13
Не пойму почему не компилирует

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

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

Добавлено через 7 минут
а кто-нибудь знает хорошие Portable компиляторы?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2013, 15:40
Привет! Вот еще темы с ответами:

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

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

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

Немного изменил код программы и она перестала работать. Не пойму почему. - C++
Программа работала, но нужно было вынести вывод суммы в main( до этого выводилась в sum). Для этого удалил строчку из sum, и добавил новую...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.02.2013, 15:40
Ответ Создать тему
Опции темы

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