• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Не Получается Создать Интерфейс Класса

  • Автор темы typak
  • Дата начала
T

typak

Есть три файла:

Первый GradeBook.h

C++:
#include <string>
using std::string;

class GradeBook
{
public:
GradeBook(string);
void setCourseName(string);
string getCourseName();
void displayMessage();
private:
string courseName;
};

Второй GradeBook.cpp

C++:
#include <iostream>
using std::cout;
using std::endl;

#include "GradeBook.h"

GradeBook::GradeBook(string name)
{
setCourseName(name);
}

void GradeBook::setCourseName(string name)
{
courseName=name;
}

string GradeBook::getCourseName()
{
return courseName;
}

void GradeBook::displayMessage()
{
cout <<"Welcome to the grade book for\n"<<getCourseName()
<<"!"<<endl;  
}

Третий файл fig03_13.cpp (клиентский код)

C++:
#include <iostream>
using std::cout;
using std::endl;

#include "GradeBook.h"

int main()
{
GradeBook gradeBook1("CS101 Introduction to C++ Programming");
GradeBook gradeBook2("CS102 Data Structures in C++");

cout <<"gradeBook1 created for: "<<gradeBook1.getCourseName()
<<"\ngradeBook2 created for: "<<gradeBook2.getCourseName()
<<endl;
return 0; 
}

Использую компилятор dev-C++ компилирую клиентский код файл fig03_13.cpp не компилируется выдает ошибку
[Linker error] undefined reference to `GradeBook::GradeBook(std::string)'
[Linker error] undefined reference to `GradeBook::GradeBook(std::string)'
[Linker error] undefined reference to `GradeBook::getCourseName()'
[Linker error] undefined reference to `GradeBook::getCourseName()'
ld returned 1 exit status


изменяю в этом файле строку #include "GradeBook.h" на #include "GradeBook.cpp"
все нормально компилируется хотя в листинге написано что должно стоять GradeBook.h....?

пытаюсь компилировать файл GradeBook.cpp исходный код класса опять же выдает ошибку:
[Linker error] undefined reference to `WinMain@16'
ld returned 1 exit status


В учебнике ясно написано, что программисты могут создавать классы оставляя тока интерфейс класса то есть заголовочный файл и компилируя в объектный код сами функции наверно в exe файл или я как то не пойму. Чота они у меня ни фига не компилируются ???

Подскажите где ошибка!!!!
 
R

rlib

Компилируешь неправильно. Сначала сделай компайлинг на каждый из файлов, потом сделай линкинг на все обьэктные файлы, которые сделает компайлер.
Плюс, качни IDE какой-нибудь, типа Eclipse, они автоматически делают проэкты, которые можно компилировать не вручную, а автоматом.

Есть три файла:

Первый GradeBook.h

C++:
#include <string>
using std::string;

class GradeBook
{
public:
GradeBook(string);
void setCourseName(string);
string getCourseName();
void displayMessage();
private:
string courseName;
};

Второй GradeBook.cpp

C++:
#include <iostream>
using std::cout;
using std::endl;

#include "GradeBook.h"

GradeBook::GradeBook(string name)
{
setCourseName(name);
}

void GradeBook::setCourseName(string name)
{
courseName=name;
}

string GradeBook::getCourseName()
{
return courseName;
}

void GradeBook::displayMessage()
{
cout <<"Welcome to the grade book for\n"<<getCourseName()
<<"!"<<endl;  
}

Третий файл fig03_13.cpp (клиентский код)

C++:
#include <iostream>
using std::cout;
using std::endl;

#include "GradeBook.h"

int main()
{
GradeBook gradeBook1("CS101 Introduction to C++ Programming");
GradeBook gradeBook2("CS102 Data Structures in C++");

cout <<"gradeBook1 created for: "<<gradeBook1.getCourseName()
<<"\ngradeBook2 created for: "<<gradeBook2.getCourseName()
<<endl;
return 0; 
}

Использую компилятор dev-C++ компилирую клиентский код файл fig03_13.cpp не компилируется выдает ошибку
[Linker error] undefined reference to `GradeBook::GradeBook(std::string)'
[Linker error] undefined reference to `GradeBook::GradeBook(std::string)'
[Linker error] undefined reference to `GradeBook::getCourseName()'
[Linker error] undefined reference to `GradeBook::getCourseName()'
ld returned 1 exit status


изменяю в этом файле строку #include "GradeBook.h" на #include "GradeBook.cpp"
все нормально компилируется хотя в листинге написано что должно стоять GradeBook.h....?

пытаюсь компилировать файл GradeBook.cpp исходный код класса опять же выдает ошибку:
[Linker error] undefined reference to `WinMain@16'
ld returned 1 exit status


В учебнике ясно написано, что программисты могут создавать классы оставляя тока интерфейс класса то есть заголовочный файл и компилируя в объектный код сами функции наверно в exe файл или я как то не пойму. Чота они у меня ни фига не компилируются ???

Подскажите где ошибка!!!!
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!