Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.09.2009, 07:02   #1
Timpi
Пользователь
 
Аватар для Timpi
 
Регистрация: 20.10.2007
Сообщений: 29
Вопрос VC++ 2005. Помогите правильно создать файлы проекта

Добрый день!

Начинаю осваивать С++. Надо сделать класс Date для работы с датами. Чтобы программа хорошо и правильно выглядела, надо разносить её составные части по модулям, на этом у меня тупик, выскакивает ошибка (см. ниже).
Кодю в Visual C++ 2005 Express Edition. Создал 2 файла: main.cpp и cls_Data.cpp
Как я понимаю, надо создать ещё заголовочный файл описывающий cls_Data.cpp, например cls_Data.h, но если он нужен, то что в нём надо написать? Как правильно распределить код по файлам?


main.cpp (здесь будут тесты):
Код:
#include <iostream>
#include "cls_Date.cpp" 

int main(){
	Date varDate(11, 11, 11);
};

cls_Data.cpp (пока только сам класс и его конструктор, позже добавлю функции для работы с датой, проверки и т.п.):
Код:
#include <iostream>

class Date{
    int day, month, year;
public:
    Date(int d, int m, int y);
};

Date::Date(int d, int m, int y){ 
    day = d;
    month = m;
    year = y;
};
Ошибки:

error LNK2005: "public: __thiscall Date::Date(int,int,int)" (??0Date@@QAE@HHH@Z) already defined in main.obj cls_Date.obj

fatal error LNK1169: one or more multiply defined symbols found D:\_ProFile\Тимофей\Мои документы\Visual Studio 2005\Projects\cls_Date\Debug\cls_Da te.exe
Timpi вне форума Ответить с цитированием
Старый 16.09.2009, 08:37   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот Майн:
Код:
//---------------------------------------------------------------------------

#pragma hdrstop

#include <tchar.h>
#include <iostream.h>
#include "Unit1.cpp"
//---------------------------------------------------------------------------

#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
 Date *varDate=new Date(11, 11, 11);
 varDate->ou();
 cin.get();
 delete varDate;
	return 0;
}
//---------------------------------------------------------------------------
Вот юнит класа:
Код:
#include <iostream.h>
class Date{
	int day, month, year;
public:
	Date(int d, int m, int y);
	ou();
};
Date::ou(){
 cout<<day<<"."<<month<<"."<<year;
}
Date::Date(int d, int m, int y){
    day = d;
    month = m;
    year = y;
};
Насчет нужности хеадеров не уверен так так пользую Borland C++, и не знаю позволено ли их в этой среде не использовать (все работает как надо, так что похоже что хеадеры не нужны).
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.09.2009, 10:01   #3
Timpi
Пользователь
 
Аватар для Timpi
 
Регистрация: 20.10.2007
Сообщений: 29
По умолчанию

Stilet, к сожалению у меня этот код не работает, выдаёт вместо 2-х, 8 ошибок и 2 предупреждения.
У меня всё работает когда весь код находится в одном файле main.cpp:
Код:
#include <iostream>

class Date{
    int day, month, year;
public:
    Date(int d, int m, int y);
};

Date::Date(int d, int m, int y){ 
    day = d;
    month = m;
    year = y;
};

int main(){
	Date varDate(11, 11, 11);
};
Он быстренько отрабатывает и закрывается, без каких либо ошибок и предупреждений.
Как же разбить на 2 файла? О чём говорят ошибки(см. выше)? Как понимаю, это ошибки линковки на завершающем этапе, но тогда что надо компилятору?
Вопрос о разбиении на файлы возник не просто так, а по причине того, что надо сделать ещё несколько классов, а потом их объединить, так что разбиение - это необходимость.

Последний раз редактировалось Timpi; 16.09.2009 в 10:14.
Timpi вне форума Ответить с цитированием
Старый 16.09.2009, 10:04   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Хм... Я конечно VS не пользую, но первое чтобы я сделал это удалил все содержимое папки Debug ну или где там у тя размешаются obj проекта. И перекомпилил (пересобрал) проект заново.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.09.2009, 10:23   #5
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

*.h - заголовочный файл, в нем должно быть описание класса
*.сpp - файл реализации


Код:
main.cpp 
Код:

#include <iostream>
#include "cls_Date.h" 

int main(){
	Date varDate(11, 11, 11);
};
cls_Data.h

Код:
#pragma once

class Date{
    int day, month, year;
public:
    Date(int d, int m, int y);
};
cls_Data.cpp

Код:
#include <iostream>
#include "cls_Date.h" 

Date::Date(int d, int m, int y){ 
    day = d;
    month = m;
    year = y;
};

Цитата:
error LNK2005: "public: __thiscall Date::Date(int,int,int)" (??0Date@@QAE@HHH@Z) already defined in main.obj cls_Date.obj
ошибка выскакивает из-за того, что вы подключаете *.cpp. CPP-файлы не надо подключать в инклудах

Последний раз редактировалось counter; 16.09.2009 в 10:27.
counter вне форума Ответить с цитированием
Старый 16.09.2009, 11:49   #6
Timpi
Пользователь
 
Аватар для Timpi
 
Регистрация: 20.10.2007
Сообщений: 29
По умолчанию

counter, Спасибо! Всё работает.

Последний раз редактировалось Timpi; 16.09.2009 в 11:58.
Timpi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создать правильно запрос .... EugeneIsmatulin SQL, базы данных 15 28.05.2009 09:20
как правильно сжимать запускные файлы? Bogood Софт 4 29.10.2008 21:35
Трудности перевода проекта с С на Visual Studio 2005 С++ IP_Sergik Общие вопросы .NET 7 30.04.2008 16:23
Не могу создать копию проекта John_chek БД в Delphi 4 15.02.2008 15:53