Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/23: Рейтинг темы: голосов - 23, средняя оценка - 4.78
LuciLumi
1 / 1 / 0
Регистрация: 02.09.2010
Сообщений: 3
1

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

02.09.2010, 01:44. Просмотров 4195. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.09.2010, 01:44
Ответы с готовыми решениями:

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

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

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

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

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

5
Nameless One
Эксперт С++
5787 / 3436 / 351
Регистрация: 08.02.2010
Сообщений: 7,448
02.09.2010, 04:18 2
LuciLumi, а можно краем глаза взглянуть на Ваш код?
0
LuciLumi
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
Nameless One
Эксперт С++
5787 / 3436 / 351
Регистрация: 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
easybudda
Модератор
Эксперт CЭксперт С++
10147 / 6054 / 1521
Регистрация: 25.07.2009
Сообщений: 11,476
02.09.2010, 10:11 5
Цитата Сообщение от LuciLumi Посмотреть сообщение
Как же скомпилировать объектный код реализации класса?
В командной строке это можно так сделать:
Код
g++ -c -o Class.o Class.cpp
В IDE какие-нибудь настройки по этому поводу должны быть...
1
LuciLumi
1 / 1 / 0
Регистрация: 02.09.2010
Сообщений: 3
03.09.2010, 00:24  [ТС] 6
Nameless One, easybudda, огромное спасибо за помощь!
Проблема действительно оказалась в типе проекта. С одной стороны, ошибка совершенно дурацкая, с другой - мне даже в голову не приходило обратить внимание на тип, пока Вы не подсказали.

Отдельное спасибо Nameless One за предупреждение о защите заголовочных файлов от повторного включения. Мне как самоучке особенно важны такие замечания.
0
03.09.2010, 00:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.09.2010, 00:24

Разделение интерфейса и реализации
Добрый день. Пытаюсь разделить проект, создал второй cpp и h файлы. Переменные...

Какие механизмы обеспечивают разделение интерфейса и реализации?
Добрый день! Не подскажите какие механизмы обеспечивают разделение...

Трудности в реализации класса
Не могу понять, почему не работают конструкторы класса... Прошу понятного...


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

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

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