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

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

typak

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

Первый 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 файл или я как то не пойму. Чота они у меня ни фига не компилируются ???

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

rlib

New member
25.04.2012
1
0
#2
Компилируешь неправильно. Сначала сделай компайлинг на каждый из файлов, потом сделай линкинг на все обьэктные файлы, которые сделает компайлер.
Плюс, качни 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 файл или я как то не пойму. Чота они у меня ни фига не компилируются ???

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