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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2011, 12:15   #1
Neolit1819
Пользователь
 
Регистрация: 28.03.2011
Сообщений: 51
По умолчанию Разбиение программы на модули

Добрый день пытаюсь из программы вынести созанный мной класс в отдельный заголовочный файл. создал файл "WorkToBMP.h" где описываю класс
Код:
#pragma once
class WorkToBMP
{
public:
	BITMAPFILEHEADER bmfHeader; //заголовок файла
	BITMAPINFOHEADER bmiHeader; // структура файла
	HANDLE FileHandle;//файл для записи BMP
	DWORD bf,bf1;

	void openfile(const wchar_t* filepath);
	void scanfile();
	void closefile();


	
};

создал файл "WorkToBMP.cpp" где описывается реализация класса
Код:
#pragma once
#include "StdAfx.h"
#include "WorkToBMP.h"
#include "MFC_BMP_READDlg.cpp"


	BITMAPFILEHEADER bmfHeader; //заголовок файла
	BITMAPINFOHEADER bmiHeader; // структура файла
	HANDLE FileHandle;//файл для записи BMP
	DWORD bf,bf1;

void openfile(const wchar_t* filepath)  
	{ 
	  FileHandle=CreateFile(filepath,GENERIC_READ |
      GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING,
	  FILE_ATTRIBUTE_NORMAL, 0);
	 
	  if(INVALID_HANDLE_VALUE == FileHandle)
		Error = "File not find ";  //присваиваю глобальной переменной сообщение об ошибке
   
	}
	
	
void closefile()
	{		CloseHandle(FileHandle);	}


void scanfile()
	{
		 // читаем заголовок файла
   if (!(ReadFile(FileHandle,&bmfHeader,sizeof(bmfHeader),&bf,NULL) )) 
	  Error = "Eror header reads  "+ GetLastError(); //присваиваю глобальной переменной сообщение об ошибке
	  
  
         // читаем структура файла
    if (!(ReadFile(FileHandle,&bmiHeader,sizeof(bmiHeader),&bf1,NULL) )) 
	   Error = "Eror info reads  "+ GetLastError(); //присваиваю глобальной переменной сообщение об ошибке
       
   
   char buf[20];
   Size   = itoa(bmfHeader.bfSize,buf,10);
   Width  = itoa(bmiHeader.biWidth,buf,10);    
   Height = itoa(bmiHeader.biHeight,buf,10);  
   Compression = itoa(bmiHeader.biCompression,buf,10);
	                    	}
Код:
в главном модуле подключаю все 
#include "stdafx.h"
#include "MFC_BMP_READ.h"
#include "MFC_BMP_READDlg.h"
#include "afxdialogex.h"
#include "WorkToBMP.h"
#include "WorkToBMP.cpp"
при комплияции сбой построения
d:\мои документы\visual studio 2010\projects\mfc_bmp_read\mfc_bmp_ read\mfc_bmp_readdlg.h(34): см. предыдущее определение "OnBnClickedButtonOpen"
1>d:\мои документы\visual studio 2010\projects\mfc_bmp_read\mfc_bmp_ read\mfc_bmp_readdlg.cpp(195): error C2084: функция "void CMFC_BMP_READDlg::OnBnClickedButton Info(void)" уже имеет текст реализации
1> d:\мои документы\visual studio 2010\projects\mfc_bmp_read\mfc_bmp_ read\mfc_bmp_readdlg.h(40): см. предыдущее определение "OnBnClickedButtonInfo"
Neolit1819 вне форума Ответить с цитированием
Старый 11.04.2011, 12:35   #2
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию

Код:
// WorkToBMP.h
class WorkToBMP
{
public:
	BITMAPFILEHEADER bmfHeader; //заголовок файла
	BITMAPINFOHEADER bmiHeader; // структура файла
	HANDLE FileHandle;//файл для записи BMP
	DWORD bf,bf1;
	
	WorkToBMP(const wchar_t* filepath);
	~WorkToBMP();
	void openfile(const wchar_t* filepath);
	void scanfile();
	void closefile();	
};

// WorkToBMP.cpp

WorkToBMP::WorkToBMP(const wchar_t* filepath)
{
    this.openfile(filepath);
}
WorkToBMP::WorkToBMP()
{
    this.closefile();
}

WorkToBMP::openfile(const wchar_t* filepath)
{
   this.FileHandle=CreateFile(filepath,GENERIC_READ |
      GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING,
	  FILE_ATTRIBUTE_NORMAL, 0);
	 
	  if(INVALID_HANDLE_VALUE == this.FileHandle)
		Error = "File not find ";  //присваиваю глобальной переменной сообщение об ошибке
}
WorkToBMP::closefile()
{
     CloseHandle(this.FileHandle);
}
Дальше думаю все понятно. Почитайте про создание классов и к слову, захват ресурса и освобождение ресурса лучше делать в конструкторе и деструкторе соответственно, а сами объекты класса, если они не подразумеваются как общие(т.е. используются в определенный момент времени, после чего уничтожаются), лучше создавать на стеке что бы не морочится потом с уничтожением( думаю, 99% программистов хоть раз в жизни забывали уничтожать объекты ).
"Тяжело в учении, легко в бою" - А.В. Суворов
Ivan_32 вне форума Ответить с цитированием
Старый 11.04.2011, 13:38   #3
Neolit1819
Пользователь
 
Регистрация: 28.03.2011
Сообщений: 51
По умолчанию

Да согласен, конструктор с деструктором лишними не будут)
Переделал как вы сказали, добавив подобным образом в файл // WorkToBMP.cpp реализацию функиции сканирования файла.

При построение выдает d:\мои документы\visual studio 2010\projects\mfc_bmp_read\mfc_bmp_ read\mfc_bmp_readdlg.cpp(9): fatal error C1014: слишком много включаемых файлов: глубина = 1024
1> MFC_BMP_READDlg.cpp
1>d:\мои документы\visual studio 2010\projects\mfc_bmp_read\mfc_bmp_ read\mfc_bmp_readdlg.cpp(9): fatal error C1014: слишком много включаемых файлов: глубина = 1024
1> Создание кода...

файл WorkToBMP.cpp включает
#include "StdAfx.h"
#include "WorkToBMP.h"
#include "MFC_BMP_READDlg.cpp"

файл "MFC_BMP_READDlg.cpp"
#include "stdafx.h"
#include "MFC_BMP_READ.h"
#include "MFC_BMP_READDlg.h"
#include "afxdialogex.h"
#include "WorkToBMP.h"
#include "WorkToBMP.cpp"

Видимо, что то лишнее пробывал изменять, одно/другое убрать, добавить, все равно собрать не получается
Neolit1819 вне форума Ответить с цитированием
Старый 11.04.2011, 13:45   #4
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию

.cpp подключать не нужно кстати.

Что именно сбоит сказать сложно так как вы все же выложили код всего одного класса и в нем вроде бы ничего такого нет, для верности можно обернуть весь код в .h -файле класса в такую конструкцию:
Код:
#ifndef WORKTOBMP_H
#define WORKTOBMP_H

class WorkToBMP
{
public:
	BITMAPFILEHEADER bmfHeader; //заголовок файла
	BITMAPINFOHEADER bmiHeader; // структура файла
	HANDLE FileHandle;//файл для записи BMP
	DWORD bf,bf1;
	
	WorkToBMP(const wchar_t* filepath);
	~WorkToBMP();
	void openfile(const wchar_t* filepath);
	void scanfile();
	void closefile();	
};

#endif
А стоп! У вас взаимный инклуд:
WorkToBMP.h - включает MFC_BMP_READDlg.cpp
а, он свою очередь WorkToBMP.h

Вообщем уберите все инклуды .cpp файлов и все станет замечательно.
"Тяжело в учении, легко в бою" - А.В. Суворов

Последний раз редактировалось Ivan_32; 11.04.2011 в 13:50.
Ivan_32 вне форума Ответить с цитированием
Старый 11.04.2011, 19:14   #5
Neolit1819
Пользователь
 
Регистрация: 28.03.2011
Сообщений: 51
По умолчанию

Ivan_32 благодарю
Neolit1819 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разбиение строки kent4 Microsoft Office Excel 6 23.12.2010 15:18
Разбиение на раздяры Aerowalk Помощь студентам 2 16.11.2010 17:20
Разбиение hrusha2006 Помощь студентам 0 07.11.2010 09:13
разбиение программы на модули SUDALV Помощь студентам 1 22.06.2010 22:01
Разбиение на части MAcK Общие вопросы .NET 4 18.09.2008 13:56