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

Не работает программа из книги Дейтела "Как программировать на с++" - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.61
Harvy Dent
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 7
11.10.2011, 16:08     Не работает программа из книги Дейтела "Как программировать на с++" #1
Помогите, пожалуйста, решить проблему. Программа из раздела книги "Отделение интерфейса от реализации". При компиляции(использую visual c++ 2008) возникают ошибки:

1) error LNK2019: unresolved external symbol "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall GradeBook::getCourseName(void)" (?getCourseName@GradeBook@@QAE?AV?$ basic_string@DU?$char_traits@D@std@ @V?$allocator@D@2@@std@@XZ) referenced in function _main
2)error LNK2019: unresolved external symbol "public: __thiscall GradeBook::GradeBook(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (??0GradeBook@@QAE@V?$basic_string@ DU?$char_traits@D@std@@V?$allocator @D@2@@std@@@Z) referenced in function _main

Текст программы следующий:

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
// файл GradeBook.h
// определение класса GradeBook
 
#include <string>
using std::string;
 
// Определение класса GradeBook
class GradeBook
{
public:
 
GradeBook(string); // конструктор инициализирующий courseName
void setCourseName(string); // устанавливает courseName
string getCourseName(); // получает название курса
void displayMessage(); // выводит сообщение приветствия
 
private: 
string courseName; // название курса для данного GradeBook
 
};
 
 
// файл gradebook.cpp
// Определение элемент-функций класса GradeBook
 
#include <iostream>
using namespace std; 
 
#include "GradeBook.h"
 
GradeBook::GradeBook(string name) // конструктор инициализирует courseName переданной строкой 
{
setCourseName(name);     // инициализировать вызовом set-функции
}
 
void GradeBook::setCourseName(string name)  // функция для установки названия курса
{
courseName = name;
}
 
string GradeBook::getCourseName() // функция для получения названия курса
{
return courseName;  
}
 
void GradeBook::displayMessage()    // вывести сообщение приветствие пользователю GradeBook
{
cout << "Wellcome to the grade book for\n" << getCourseName();
cout << "!" << endl;
}
 
 
// файл CourseC++.cpp
// Демонстрация класса GradeBook после отделения его интерфейса
// от реализации
 
#include <iostream>
using namespace std;
 
#include "GradeBook.h" // включить определение класса GradeBook
 
int main()
{
// создать два объекта GradeBook
GradeBook gradeBook1("CS101 Introduction to C++ Programming");
GradeBook gradeBook2("CS102 Data Structures in C++");
 
// вывести исходное значение сourseName для каждого GradeBook
cout << "gradeBook1 created for:" << gradeBook1.getCourseName() << endl;
cout << "gradeBook2 created for:" << gradeBook2.getCourseName() << endl;
 
 
cout << endl;
 
return 0;
}
 Комментарий модератора 
Нет смысла вручную раскрашивать комментарии в исходном коде - с подсветкой синтаксиса для С++ лучше справится код [cpp][/cpp]
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2011, 16:08     Не работает программа из книги Дейтела "Как программировать на с++"
Посмотрите здесь:

Пример из книги "Как программировать на С++" C++
Прошу ссылку на книгу Дейтел "Как программировать на C" (не С++) C++
C++ Книги по С++ (что читать после книги Дейтела "Как программировать на С++")
Посоветуйте, что учить после Дейтелей "Как программировать на С++" C++
Перевод из двоичной системы в десятичную, задача 2.30 "Как программировать на С++" C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
11.10.2011, 16:20     Не работает программа из книги Дейтела "Как программировать на с++" #2
Harvy Dent, хоть убей не пойму в чём проблемма, всё компилится на ура, в программе ввёл единственную замену - зачем 2 раза подключать
Цитата Сообщение от Harvy Dent Посмотреть сообщение
#include <iostream>
using namespace std;
- это на мой взгляд глупость и выглядит как множественное подключение. Вот так пишем и компилируем
C++
1
2
3
4
5
6
// файл GradeBook.h
// определение класса GradeBook
#include <iostream>
using namespace std; 
#include <string>
using std::string;
C++
1
2
3
4
#include "GradeBook.h" // включить определение класса GradeBook
int main()
{
// создать два объекта GradeBook
Миниатюры
Не работает программа из книги Дейтела "Как программировать на с++"  
Вложения
Тип файла: rar GradeBook_proj.rar (2.3 Кб, 30 просмотров)
-=ЮрА=-
11.10.2011, 16:23
  #3

Не по теме:

PS:Возможно указанные в топике ошибки и были обусловлены многократным подключением #include <iostream>. В проекте прикрепил РАБОЧИЙ проект - консоль приложил как подтверждение...

Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
11.10.2011, 16:30     Не работает программа из книги Дейтела "Как программировать на с++" #4
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Вот так пишем и компилируем
C++
1
2
3
4
5
6
// файл GradeBook.h
// определение класса GradeBook
#include <iostream>
using namespace std; 
#include <string>
using std::string;
Ну молодец, что...
Harvy Dent
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 7
11.10.2011, 16:38  [ТС]     Не работает программа из книги Дейтела "Как программировать на с++" #5
Большое спасибо =ЮрА= за помощь. Запустил твой проект и он на удивление заработал. А вот мой почему-то нет. Но это уже не так важно.
-=ЮрА=-
11.10.2011, 16:44
  #6

Не по теме:

Цитата Сообщение от Deviaphan Посмотреть сообщение
Ну молодец, что...
- неужели я услышал что-то положительное в свою сторону?
Ну а если серьёзно чем на сей раз упрекнуть то меня хотел - что опять не так???

Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
11.10.2011, 16:48     Не работает программа из книги Дейтела "Как программировать на с++" #7
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Ну а если серьёзно чем на сей раз упрекнуть то меня хотел - что опять не так?
Я жирным выделю, вместо тэгов.)

// файл GradeBook.h
// определение класса GradeBook
#include <iostream>
using namespace std;
#include <string>
using std::string;

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

Не по теме:

Цитата Сообщение от Deviaphan Посмотреть сообщение
Ну молодец, что...
Я излишне грамотный. Хотел написать "чо", но не смог.(

Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
11.10.2011, 16:52     Не работает программа из книги Дейтела "Как программировать на с++" #8
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
PS:Возможно указанные в топике ошибки и были обусловлены многократным подключением #include <iostream>
скандалы, интриги, расследования.
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Harvy Dent, хоть убей не пойму в чём проблемма, всё компилится на ура, в программе ввёл единственную замену - зачем 2 раза подключать
#include <iostream>
using namespace std;
- это на мой взгляд глупость и выглядит как множественное подключение. Вот так пишем и компилируем
какая разница, как это выглядит? А вот запись "using namespace std;" в заголовочном файле - это просто-таки насилие над идеей пространств имен. Я бы, наверное, подал на тебя в суд, если бы это имело бы смысл
-=ЮрА=-
Заблокирован
Автор FAQ
11.10.2011, 17:06     Не работает программа из книги Дейтела "Как программировать на с++" #9

Не по теме:

Цитата Сообщение от Nameless One Посмотреть сообщение
Я бы, наверное, подал на тебя в суд, если бы это имело бы смысл
- поясни нормально на пальцах, учту в дальнейшем...
В чём ошибка что буду юзать именно std?
По моему 10 без этой строки using namespace std; вообще посылает
PS:Я в виндозе пишу и юзаю студию(причём в данный момент 6-ую)



Добавлено через 7 минут
Nameless One, может всё-таки ответишь, а то как то обижаешь ни за что!Человеку я помог
Цитата Сообщение от Harvy Dent Посмотреть сообщение
Большое спасибо =ЮрА= за помощь. Запустил твой проект и он на удивление заработал. А вот мой почему-то нет. Но это уже не так важно.
.

Не по теме:

Что строками using namespace std; ?
#include <string> заменить, по моему без разницы когда мы сказали использовать std до или после string

Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
11.10.2011, 17:11     Не работает программа из книги Дейтела "Как программировать на с++" #10
-=ЮрА=-, потому, что если использовать директиву "using namespace std;" в заголовочном файле, то засоряется глобальное пространство имен не только в этом самом заголовочном файле, но и в каждом файле, в котором этот заголовочный файл включается.
Эту директиву вообще не рекомендуется использовать, но если сильно хочется, то лучше ограничить ее действие только .cpp-файлами
Harvy Dent
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 7
11.10.2011, 17:13  [ТС]     Не работает программа из книги Дейтела "Как программировать на с++" #11
Глупый вопрос. Как ты создавал этот проект? Мне кажется, что программа не работала именно из-за неправильного создания проекта, так как в книге об этом Дейтел не говорит.
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
11.10.2011, 17:17     Не работает программа из книги Дейтела "Как программировать на с++" #12
Цитата Сообщение от Harvy Dent Посмотреть сообщение
Глупый вопрос. Как ты создавал этот проект? Мне кажется, что программа не работала именно из-за неправильного создания проекта, так как в книге об этом Дейтел не говорит.
это ты сейчас с кем разговариваешь? О_о
Harvy Dent
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 7
11.10.2011, 17:21  [ТС]     Не работает программа из книги Дейтела "Как программировать на с++" #13
По поводу using namespace std;. Не буду спорить, плохо или хорошо включать эту строку(так как пока не разбираюсь в этом), но без неё в Visual c++ 2008 у меня почему-то даже "Hello world!" не запускался.
-=ЮрА=-
11.10.2011, 17:24
  #14

Не по теме:

Цитата Сообщение от Nameless One Посмотреть сообщение
using namespace std;
убрать в хедере и только в CourseC.cpp вбить после этого #include "GradeBook.h", ок
Цитата Сообщение от Nameless One Посмотреть сообщение
но если сильно хочется,
- ха без неё компилятор посылает на 3 буквы при использовании std::cout(cin) - хорошо учту твоё замечание...

Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
11.10.2011, 17:26     Не работает программа из книги Дейтела "Как программировать на с++" #15
Harvy Dent, hint: идентификатор cout расположен в пространстве имен std. Поэтому, чтобы его использовать в программе, тебе нужно указать прострванство имен:
C++
1
2
3
4
5
6
7
#include <iostream>
 
int main()
{
   std::cout << "Hello, World!" << std::endl;
   return 0;
}
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ха без неё компилятор посылает на 3 буквы при использовании std::cout
пример приведи, а то я все ее не использую, но компилятор почему-то меня никуда не посылает
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
убрать в хедере и только в CourseC.cpp вбить после этого #include "GradeBook.h", ок
это еще приемлимо, да, но нужно "вбивать" using namespace std; после подключения всех хедеров
Harvy Dent
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 7
11.10.2011, 17:29  [ТС]     Не работает программа из книги Дейтела "Как программировать на с++" #16
-=ЮрА=-, как ты создавал этот проект? Мне кажется, что программа не работала именно из-за неправильного создания проекта, так как в книге об этом Дейтел не говорит.
-=ЮрА=-
Заблокирован
Автор FAQ
11.10.2011, 17:33     Не работает программа из книги Дейтела "Как программировать на с++" #17
Цитата Сообщение от Harvy Dent Посмотреть сообщение
Не буду спорить, плохо или хорошо включать эту строку(так как пока не разбираюсь в этом), но без неё в Visual c++ 2008 у меня почему-то даже "Hello world!" не запускался.
- я уже об этом написал
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ха без неё компилятор посылает на 3 буквы при использовании std::cout(cin)
Предполагаю что Nameless One, не использует студию и там подключение данного неймспейса критично, студия наоборот требует явного указания на использование функций std

Добавлено через 2 минуты
Цитата Сообщение от Nameless One Посмотреть сообщение
пример приведи, а то я все ее не использую, но компилятор почему-то меня никуда не посылает
- вечером посыл от 2008 выложу, хотя на 6-ке компилится норм
C++
1
2
3
4
5
6
7
#include <iostream>
 
int main(void)
{
    std::cout<<"Hello world";
    return 0;
}
Nameless One, какой компилятор ты используешь???
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
11.10.2011, 17:33     Не работает программа из книги Дейтела "Как программировать на с++" #18
-=ЮрА=-, в студии тоже не обязательно использовать строку using namespace std;
Просто, все что ты берешь оттуда, нужно предварять квалификатором std::
Т.е., вместо cout писать std::cout и приведенный Nameless One пример компилируется в студии на ура
VS2010 - моя IDE
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
11.10.2011, 17:34     Не работает программа из книги Дейтела "Как программировать на с++" #19
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Предполагаю что Nameless One, не использует студию и там подключение данного неймспейса критично, студия наоборот требует явного указания на использование функций std
Добавлено через 25 секунд
Nameless One, какой компилятор ты используешь???
это критично везде и не зависит от используемого компилятора
и да, ошибки ТС, полученные в первом посте - это ошибки линковки, которые опять таки не связаны с пространством имен
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2011, 17:37     Не работает программа из книги Дейтела "Как программировать на с++"
Еще ссылки по теме:

C++ Задача из книги Дейтела "Шахматная доска"
C++ Задача из книги Дейтела "Квадрат"
Задача из книги Дейтела "Ромб" C++

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

Или воспользуйтесь поиском по форуму:
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
11.10.2011, 17:37     Не работает программа из книги Дейтела "Как программировать на с++" #20
Ну и в догонку, вот что на эту тему говорит Google Coding Style Guide
Yandex
Объявления
11.10.2011, 17:37     Не работает программа из книги Дейтела "Как программировать на с++"
Ответ Создать тему
Опции темы

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