如何把Cspeadsheet类从.H文件公成.h和.cpp两个文件?

wmjhl 2014-12-16 08:56:21

CSpreadSheet::CSpreadSheet(CString File, CString SheetOrSeparator, bool Backup) :
m_Database(NULL), m_rSheet(NULL), m_sFile(File),
m_dTotalRows(0), m_dTotalColumns(0), m_dCurrentRow(1),
m_bAppend(false), m_bBackup(Backup), m_bTransaction(false)
{
// Detect whether file is an Excel spreadsheet or a text delimited file
m_stempString = m_sFile.Right(4);
m_stempString.MakeLower();
if (m_stempString == _T(".xls")) // File is an Excel spreadsheet
{
m_bExcel = true;
m_sSheetName = SheetOrSeparator;
m_sSeparator = _T(",;.?");
}
else // File is a text delimited file
{
m_bExcel = false;
m_sSeparator = SheetOrSeparator;
}

if (m_bExcel) // If file is an Excel spreadsheet
{
m_Database = new CDatabase;
GetExcelDriver();
m_sDsn.Format(_T("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s"), m_sExcelDriver, m_sFile, m_sFile);

if (Open())
{
if (m_bBackup)
{
if ((m_bBackup) && (m_bAppend))
{
CString tempSheetName = m_sSheetName;
m_sSheetName = _T("CSpreadSheetBackup");
m_bAppend = false;
if (!Commit())
{
m_bBackup = false;
}
m_bAppend = true;
m_sSheetName = tempSheetName;
m_dCurrentRow = 1;
}
}
}
}
else // if file is a text delimited file
{
if (Open())
{
if ((m_bBackup) && (m_bAppend))
{
m_stempString = m_sFile;
m_stempSql.Format(_T("%s.bak"), m_sFile);
m_sFile = m_stempSql;
if (!Commit())
{
m_bBackup = false;
}
m_sFile = m_stempString;
}
}
}
}


这个函数为什么这样写?
...全文
133 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wmjhl 2014-12-19
  • 打赏
  • 举报
回复
再顶下,来人看看
wmjhl 2014-12-17
  • 打赏
  • 举报
回复
引用 8 楼 lsq19871207 的回复:
[quote=引用 6 楼 wmjhl 的回复:] [quote=引用 5 楼 lsq19871207 的回复:] [quote=引用 3 楼 wmjhl 的回复:] [quote=引用 1 楼 lsq19871207 的回复:] 这个函数不就是CSpreadSheet类的带参数的构造函数么,你具体的疑问是什么?
这个类把声明和实现都写在.h文件里了,如果我在两个地方都#include 'CSpeadsheet.h"会出错,所以想把这个类分开[/quote] 类的声明和实现都写在.h中是可以的,即使不建议这么做。你可以看看WTL里面的源代码,大多都是写在.h中 你说的“两个地方都#include 'CSpeadsheet.h"会出错”这个问题,肯定是属于多次重复包含造成的,你需要在CSpeadsheet.h文件中加入防止重复包含的控制语句啊!

#ifndef __CSPEADSHEET__
#define __CSPEADSHEET__
class CSpeadsheet
{
    CSpeadsheet() {}
    ~CSpeadsheet() {}
    //
    //
};
#endif
或者:

#pragma once
class CSpeadsheet
{
    CSpeadsheet() {}
    ~CSpeadsheet() {}
    //
    //
};
[/quote] 这个里面已经加过了[/quote] 我还不信那卸了!你贴出这个头文件让我们看看[/quote] 太长了发不了,给个邮箱,我给你发过去
wmjhl 2014-12-17
  • 打赏
  • 举报
回复
引用 9 楼 lx624909677 的回复:
[quote=引用 3 楼 wmjhl 的回复:] [quote=引用 1 楼 lsq19871207 的回复:] 这个函数不就是CSpreadSheet类的带参数的构造函数么,你具体的疑问是什么?
这个类把声明和实现都写在.h文件里了,如果我在两个地方都#include 'CSpeadsheet.h"会出错,所以想把这个类分开[/quote] 为毛要在声明和实现的时候都引用这个头文件,引用一次就可以[/quote] 引用一次之后,在另外一个类里使用,就会说CSpeadsheet不识别的类型
schlafenhamster 2014-12-17
  • 打赏
  • 举报
回复
CSpreadSheet::CSpreadSheet(CString File, CString SheetOrSeparator, bool Backup); 这是声明 在 h
信阳毛尖 2014-12-16
  • 打赏
  • 举报
回复
引用 6 楼 wmjhl 的回复:
[quote=引用 5 楼 lsq19871207 的回复:] [quote=引用 3 楼 wmjhl 的回复:] [quote=引用 1 楼 lsq19871207 的回复:] 这个函数不就是CSpreadSheet类的带参数的构造函数么,你具体的疑问是什么?
这个类把声明和实现都写在.h文件里了,如果我在两个地方都#include 'CSpeadsheet.h"会出错,所以想把这个类分开[/quote] 类的声明和实现都写在.h中是可以的,即使不建议这么做。你可以看看WTL里面的源代码,大多都是写在.h中 你说的“两个地方都#include 'CSpeadsheet.h"会出错”这个问题,肯定是属于多次重复包含造成的,你需要在CSpeadsheet.h文件中加入防止重复包含的控制语句啊!

#ifndef __CSPEADSHEET__
#define __CSPEADSHEET__
class CSpeadsheet
{
    CSpeadsheet() {}
    ~CSpeadsheet() {}
    //
    //
};
#endif
或者:

#pragma once
class CSpeadsheet
{
    CSpeadsheet() {}
    ~CSpeadsheet() {}
    //
    //
};
[/quote] 这个里面已经加过了[/quote] 我还不信那卸了!你贴出这个头文件让我们看看
wmjhl 2014-12-16
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/40058410 这是以前的例子
wmjhl 2014-12-16
  • 打赏
  • 举报
回复
引用 5 楼 lsq19871207 的回复:
[quote=引用 3 楼 wmjhl 的回复:] [quote=引用 1 楼 lsq19871207 的回复:] 这个函数不就是CSpreadSheet类的带参数的构造函数么,你具体的疑问是什么?
这个类把声明和实现都写在.h文件里了,如果我在两个地方都#include 'CSpeadsheet.h"会出错,所以想把这个类分开[/quote] 类的声明和实现都写在.h中是可以的,即使不建议这么做。你可以看看WTL里面的源代码,大多都是写在.h中 你说的“两个地方都#include 'CSpeadsheet.h"会出错”这个问题,肯定是属于多次重复包含造成的,你需要在CSpeadsheet.h文件中加入防止重复包含的控制语句啊!

#ifndef __CSPEADSHEET__
#define __CSPEADSHEET__
class CSpeadsheet
{
    CSpeadsheet() {}
    ~CSpeadsheet() {}
    //
    //
};
#endif
或者:

#pragma once
class CSpeadsheet
{
    CSpeadsheet() {}
    ~CSpeadsheet() {}
    //
    //
};
[/quote] 这个里面已经加过了
信阳毛尖 2014-12-16
  • 打赏
  • 举报
回复
引用 3 楼 wmjhl 的回复:
[quote=引用 1 楼 lsq19871207 的回复:] 这个函数不就是CSpreadSheet类的带参数的构造函数么,你具体的疑问是什么?
这个类把声明和实现都写在.h文件里了,如果我在两个地方都#include 'CSpeadsheet.h"会出错,所以想把这个类分开[/quote] 类的声明和实现都写在.h中是可以的,即使不建议这么做。你可以看看WTL里面的源代码,大多都是写在.h中 你说的“两个地方都#include 'CSpeadsheet.h"会出错”这个问题,肯定是属于多次重复包含造成的,你需要在CSpeadsheet.h文件中加入防止重复包含的控制语句啊!

#ifndef __CSPEADSHEET__
#define __CSPEADSHEET__
class CSpeadsheet
{
    CSpeadsheet() {}
    ~CSpeadsheet() {}
    //
    //
};
#endif
或者:

#pragma once
class CSpeadsheet
{
    CSpeadsheet() {}
    ~CSpeadsheet() {}
    //
    //
};
wmjhl 2014-12-16
  • 打赏
  • 举报
回复
引用 2 楼 lx624909677 的回复:
将一个类的函数声明和变量的创建写在.h文件中,奖类的实现和变量的初始化写在.cpp中
我试了一下,没有成功.以前没有做过,不知道要注意哪些地方
wmjhl 2014-12-16
  • 打赏
  • 举报
回复
引用 1 楼 lsq19871207 的回复:
这个函数不就是CSpreadSheet类的带参数的构造函数么,你具体的疑问是什么?
这个类把声明和实现都写在.h文件里了,如果我在两个地方都#include 'CSpeadsheet.h"会出错,所以想把这个类分开
lx624909677 2014-12-16
  • 打赏
  • 举报
回复
将一个类的函数声明和变量的创建写在.h文件中,奖类的实现和变量的初始化写在.cpp中
信阳毛尖 2014-12-16
  • 打赏
  • 举报
回复
这个函数不就是CSpreadSheet类的带参数的构造函数么,你具体的疑问是什么?
lx624909677 2014-12-16
  • 打赏
  • 举报
回复
引用 3 楼 wmjhl 的回复:
[quote=引用 1 楼 lsq19871207 的回复:] 这个函数不就是CSpreadSheet类的带参数的构造函数么,你具体的疑问是什么?
这个类把声明和实现都写在.h文件里了,如果我在两个地方都#include 'CSpeadsheet.h"会出错,所以想把这个类分开[/quote] 为毛要在声明和实现的时候都引用这个头文件,引用一次就可以

16,482

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧