1 / 1 / 0
Регистрация: 02.09.2010
Сообщений: 3
1

Отделение интерфейса от реализации класса: компиляция кода реализации

02.09.2010, 01:44. Показов 6016. Ответов 5
Метки нет (Все метки)

Доброго времени суток,
У меня возникла проблема с отделением интерфейса от реализации класса. Допустим, у меня есть три файла:
1. заголовочный файл Class.h с прототипами функций;
2. файл реализации Class.cpp с определениями функций без функции main;
3. файл клиента Start.cpp, использующий класс Class
Я хочу скомпилировать объектный код реализации класс. Однако при запуске компиляции Class.cpp компилятор Dev-C++ выдает ошибку: "[Linker error] undefined reference to `WinMain@16'" (короче, ему для счастья функции main() не хватает).
Как же скомпилировать объектный код реализации класса? Дейтел о таких подставах не предупреждал
Сам по себе код в порядке: пока я не пытаюсь отделить интерфейс от реализации и работаю с двумя файлами вместо трех (заголовочным, в котором определены функции, и файлом клиента) проблем не возникает.
Заранее спасибо за помощь.
1

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.09.2010, 01:44
Ответы с готовыми решениями:

Отделение интерфейса класса от реализации
Осваиваю раздел одной книги "Отделение интерфейса класса от реализации". То что получилось можно и...

Отделение интерфейса класса от его реализации
Всем привет! Прочитал все найденные похоже темы, но ответа на свой вопрос я не нашел. Поэтому...

Отделение интерфейса от реализации
Сделала рабочую программу. Нужно разделить интерфейс от реализации. Делаю как написано: добавить в...

Отделение интерфейса от реализации
Доброго времени суток! Имеется вопрос по теме, обозначенной в заголовке. Предположим, я...

5
Эксперт С++
5819 / 3471 / 357
Регистрация: 08.02.2010
Сообщений: 7,448
02.09.2010, 04:18 2
LuciLumi, а можно краем глаза взглянуть на Ваш код?
0
1 / 1 / 0
Регистрация: 02.09.2010
Сообщений: 3
02.09.2010, 07:59  [ТС] 3
Nameless One, большое спасибо за ответ!
Мой "родной" код довольно громоздкий, не думаю, что стоит Вас им грузить. Вот пример кода, найденный мной в одной из старых тем этого форума. При компиляции Empty.cpp Dev-C++ выдает ту же ошибку. Все три файла лежат в одной папке, и всё вроде бы должно работать, ан нет...

Empty.h
C++
1
2
3
4
5
class Empty{
   int a;
public:
   void Method();
};
Empty.cpp
C++
1
2
3
4
#include "Empty.h"
void Empty::Method(){
   a = 5;
}
main.cpp
C++
1
2
3
4
5
#include "Empty.h"
int main(){
   Empty E;
   E.Method();
}
0
Эксперт С++
5819 / 3471 / 357
Регистрация: 08.02.2010
Сообщений: 7,448
02.09.2010, 08:35 4
LuciLumi, это не решит проблему, но все же скажу на будущее вот что. Заголовочные файлы с описанием функций и классов нужно защищать от повторного включения вот так (на примере приведенных Вами файлов):
C++
1
2
3
4
5
6
7
8
9
#ifndef EMPTY_H
#define EMPTY_H
 
class Empty{
   int a;
public:
   void Method();
};
#endif
Почему и как это работает - я отвечал в этой теме (см. пост 7 и далее).
По поводу Вашей проблемы - я не знаком со средой Dev-C++, но догадываюсь, в чем может быть ошибка. Судя по тому, что компилятор не может найти ссылку на функцию WinMain@16 (это главная функция WinAPI-приложения, принимает параметров в общей сложности на 16 байт), Вы создаете не тот тип проекта, а именно, что-нибудь типа Win32 Application (приложение Win32). Вам же нужно создавать консольное приложение (console application), для которого как раз главной функцией будет не WinMain, а просто main
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10996 / 6956 / 1642
Регистрация: 25.07.2009
Сообщений: 12,667
02.09.2010, 10:11 5
Цитата Сообщение от LuciLumi Посмотреть сообщение
Как же скомпилировать объектный код реализации класса?
В командной строке это можно так сделать:
Код
g++ -c -o Class.o Class.cpp
В IDE какие-нибудь настройки по этому поводу должны быть...
1
1 / 1 / 0
Регистрация: 02.09.2010
Сообщений: 3
03.09.2010, 00:24  [ТС] 6
Nameless One, easybudda, огромное спасибо за помощь!
Проблема действительно оказалась в типе проекта. С одной стороны, ошибка совершенно дурацкая, с другой - мне даже в голову не приходило обратить внимание на тип, пока Вы не подсказали.

Отдельное спасибо Nameless One за предупреждение о защите заголовочных файлов от повторного включения. Мне как самоучке особенно важны такие замечания.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.09.2010, 00:24

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Класс, отделение интерфейса от реализации
Всем привет. Пытаюсь разделить интерфейс от реализации. вот исходный код: файл GradeBook.h ...

Отделение интерфейса класса от реализации (Ошибка при компиляции)
Не могу решить проблему... При попытке скомпилировать исходник из дейтелловской книги получаю...

Отделение интерфейса от реализации
Задача была разделить интерфейс от реализации. линковщик g++ ругается на неопределение функций в...

Отделение интерфейса __forceinline функции от реализации
Сабж. Как смочь? Вопрос актуален как для просто функций, так и для функций - членов классов. ...

Отделение графики от реализации
Народ, подскажите пожалуйста, или дайте ссылку на то, какие на данный момент существуют методики...

Роблема в реализации интерфейса
import java.util.ArrayList; interface DoSomeThing { // интерфейс для того что бы менять местами...


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

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

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