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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.61
Harvy Dent
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 7
#1

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

11.10.2011, 16:08. Просмотров 3846. Ответов 42
Метки нет (Все метки)

Помогите, пожалуйста, решить проблему. Программа из раздела книги "Отделение интерфейса от реализации". При компиляции(использую 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]
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2011, 16:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не работает программа из книги Дейтела "Как программировать на с++" (C++):

Книги по С++ (что читать после книги Дейтела "Как программировать на С++") - C++
Добрый день господа!!! Я от можно сказать дочитываю Дейтела &quot;Как программировать на С++&quot; 5 издание, и от думаю какую следующую книгу...

Задача из книги Дейтела "Шахматная доска" - C++
В задаче использовать управляющие структуры(лог.операции, циклы) можно массивы. Остального я пока не знаю))

Задача из книги Дейтела "Ромб" - C++
В задаче использовать управляющие структуры(лог.операции, циклы) можно массивы. Остального я пока не знаю))

Задача из книги Дейтела "Квадрат" - C++
Здравствуйте,В задаче использовать управляющие структуры(лог.операции, циклы) можно массивы. Остального я пока не знаю))

Пример из книги "Как программировать на С++" - C++
Доброго времени суток форумчане! Читал книгу и наткнулся на такой пример: #include &lt;iostream&gt; #include &lt;iomanip&gt; using...

Создать класс "Книга" с полями "название книги", "количество страниц", "год издания" - C++
Создать класс Книга поля: название книги,количество страниц,год издания методы: вычислить сколько лет книге и количество дней прошедших...

42
Harvy Dent
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 7
11.10.2011, 17:29  [ТС] #16
-=ЮрА=-, как ты создавал этот проект? Мне кажется, что программа не работала именно из-за неправильного создания проекта, так как в книге об этом Дейтел не говорит.
0
-=ЮрА=-
Заблокирован
Автор 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, какой компилятор ты используешь???
0
aeshes
441 / 204 / 13
Регистрация: 07.10.2011
Сообщений: 462
11.10.2011, 17:33 #18
-=ЮрА=-, в студии тоже не обязательно использовать строку using namespace std;
Просто, все что ты берешь оттуда, нужно предварять квалификатором std::
Т.е., вместо cout писать std::cout и приведенный Nameless One пример компилируется в студии на ура
VS2010 - моя IDE
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
11.10.2011, 17:34 #19
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Предполагаю что Nameless One, не использует студию и там подключение данного неймспейса критично, студия наоборот требует явного указания на использование функций std
Добавлено через 25 секунд
Nameless One, какой компилятор ты используешь???
это критично везде и не зависит от используемого компилятора
и да, ошибки ТС, полученные в первом посте - это ошибки линковки, которые опять таки не связаны с пространством имен
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
11.10.2011, 17:37 #20
Ну и в догонку, вот что на эту тему говорит Google Coding Style Guide
0
-=ЮрА=-
11.10.2011, 17:37
  #21

Не по теме:

aeshes, это когда так пишешь

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
#include <iostream>
попробуй старый стиль заголовков...

0
aeshes
11.10.2011, 17:42
  #22

Не по теме:

-=ЮрА=-, что ты имеешь в виду под старым стилем заголовков? iostream.h? он не подключается на этапе компиляции - нет такого файла.причем здесь std? Или что-то другое? Просто я писала в студиях, начиная с VS2005 и не знаю, что такое старый стиль заголовков
И речь шла именно о примере Nameless One, он отлично компилируется и пишет Hello world

0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
11.10.2011, 17:45 #23
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
хотя на 6-ке компилится норм
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
попробуй старый стиль заголовков...
6.0 уже тринадцать лет исполнилось, она не поддерживает даже стандарт C++03, не то что новый, а ты еще предлагаешь использовать старый стиль заголовков. Так что я тоже присоединясь к мнению:
Цитата Сообщение от Deviaphan Посмотреть сообщение
Ну молодец, что...
0
-=ЮрА=-
Заблокирован
Автор FAQ
11.10.2011, 17:49 #24
aeshes, пишите в 10-ке пишите дальше у меня нет охоты ещё на вас время тратить
Цитата Сообщение от aeshes Посмотреть сообщение
iostream.h? он не подключается на этапе компиляции - нет такого файла.
(для вас миниатюра)Много лет назад люди писали iostream.h и юзали старые заголовки, и юзают их в Си

Меня уже не прильщает данный разбор. Я спросил мне ответили - в дальнейшем учту критичность неймспейсов!В данный момент пишу в 6-ке чтобы у ТС всё шло на 10-ке, это по крайней мере геморно!!И вобще также предпочитаю работь с MFC и пишу совершенно иные проекты, к консоли отнушусь мегко сказать с нисхождением - т.к. по своей сути консоль почти то же окно DOS только спустя 20 лет после его пояыления...
0
Миниатюры
Не работает программа из книги Дейтела "Как программировать на с++"  
-=ЮрА=-
11.10.2011, 17:51
  #25

Не по теме:

Цитата Сообщение от Nameless One Посмотреть сообщение
6.0 уже тринадцать лет исполнилось, она не поддерживает даже стандарт C++03, не то что новый, а ты еще предлагаешь использовать старый стиль заголовков.
- я уже когда-то писал что на работе новей никак не поставить!
Кстати тут люди и в 4-м билдере на форуме вопросы задают - им что не отвечать или как??

0
aeshes
441 / 204 / 13
Регистрация: 07.10.2011
Сообщений: 462
11.10.2011, 17:53 #26

Не по теме:

-=ЮрА=-, я вас разве оскорбляла? зачем вы переходите на личности?
И сообщение о том, что файл iostream.h не найден - это сообщение компилятора в VS2010
И специально для вас миниатюра
Не работает программа из книги Дейтела "Как программировать на с++"


И в моей папке с инклюдами лежит iostream без расширений
0
Nameless One
11.10.2011, 17:55
  #27
 Комментарий модератора 
Дамы и господа, заканчиваем с офтопом
0
Harvy Dent
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 7
11.10.2011, 17:57  [ТС] #28
Nameless One, возможно приведенные ошибки и не зависят от добавления namespace::std, но в отличии от моей, программа, которую мне скинул -=ЮрА=- в архиве, заработала прекрасно, хотя отличия были только в отсутствии строк:
#include <iostream>
using namespace::std;
в файле, содержащем функцию main(). Поэтому я и задал вопрос, по поводу создания проекта, так как мой возможно был создан неправильно.(хотя до этого вроде все проги работали нормально).
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
11.10.2011, 18:02 #29
Цитата Сообщение от Harvy Dent Посмотреть сообщение
Nameless One, возможно приведенные ошибки и не зависят от добавления namespace::std, но в отличии от моей, программа, которую мне скинул -=ЮрА=- в архиве, заработала прекрасно, хотя отличия были только в отсутствии строк:
#include <iostream>
using namespace::std;
в файле, содержащем функцию main(). Поэтому я и задал вопрос, по поводу создания проекта, так как мой возможно был создан неправильно.(хотя до этого вроде все проги работали нормально).
Если бы дело было в строке "using namespace std;", то компилятор бы просто ругался на неизвестные идентификаторы в коде на этапе трансляции (но не на неразрешенные символы на этапе линковки).
Скорее всего это ошибка проекта самой студии (тут я не уверен, так как там работал достаточно мало).
0
NinGAZ
14 / 14 / 1
Регистрация: 27.07.2011
Сообщений: 162
11.10.2011, 22:57 #30
каюсь,было лень читать 3 страницы топика,но я знаю в чем ГЛАВНАЯ ошибка ТС - прога в данном случае(по Дейтлам) должна делиться на хидер,его исполняемый файл и main-файл. ТС все в одну кучу слепил,не понимая сути ООП.

к примеру: GradeBook.h - в нем описаны методы класса,в GradeBook.cpp - то как эти методы реализованы, CourseC++.cpp - главный файл проги(я предпочитаю main.cpp называть),в нем реализуется сама прога.

что касаемо GradeBook.h и GradeBook.cpp,то делается это для отделения интерфейса от реализации. иными словами,со временем ты можешь придумать более быстрый алгоритм,но при этом,чтобы не переписывать "добрую" часть кода ты лезешь в GradeBook.cpp и меняешь то что тебе нужно.

надеюсь,что не баян.

Добавлено через 7 минут
не,не баян,осилил тему) а вообще,афтар,почитай о том,что такое ООП. хотя с++ мультипарадигмальный. в общем есть куда расти. я сам-то нуб,что таить
0
11.10.2011, 22:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2011, 22:57
Привет! Вот еще темы с ответами:

Перевод из двоичной системы в десятичную, задача 2.30 "Как программировать на С++" - C++
Здравствуйте! Не могу решить задачу из книги. Задача Введите целые данные, содержащие только нули и единицы (т.е. «двоичные»...

Посоветуйте, что учить после Дейтелей "Как программировать на С++" - C++
Доброго времени суток, я начинающий программист(если так можно сказать), вот закончил изучать книгу Дейтелей &quot;Как программировать на С++&quot;,...

Прошу ссылку на книгу Дейтел "Как программировать на C" (не С++) - C++
Яндекс и другие дают много ссылок на книгу &quot;Как программировать на С&quot;, но в подавляющем большинстве случаев это ссылки на книгу с похожим...

Нужен диск, что шел с книгой "Ф. Глассборо, Р. Аллен. Как научиться программировать на языке C++" - C++
Здравствуйте! Может кто-нибудь сможет мне помочь...В общем у меня есть книга &quot;Ф. Глассборо,Р. Аллен. Как научиться программировать на...


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

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

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