如何把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;
}
}
}
}


这个函数为什么这样写?
...全文
210 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] 为毛要在声明和实现的时候都引用这个头文件,引用一次就可以
内容概要:本文围绕“基于改进秃鹰算法的微电网群经济优化调度”展开研究,提出了一种改进的秃鹰搜索算法(BES),旨在解决微电网群在复杂运行环境下的多目标、强约束、非线性及高维经济调度问题。通过引入特定优化策略,增强了基础算法的全局搜索能力和收敛效率,克服了传统智能算法易陷入局部最优的缺陷。研究构建了一个包含分布式电源、储能系统与多元负荷的微电网群调度模型,以最小化系统综合运行成本为核心目标,综合考虑功率平衡、设备出力能力、储能运行特性等多重约束条件。通过仿真实验验证了所提算法在调度精度、稳定性和计算效率方面相较于传统方法具有明显优势,并进一步展示了其在降低能源开支、提升可再生能源消纳水平方面的实际应用价值。; 适合人群:具备一定电力系统基础知识或优化算法背景,从事新能源调度、智能优化算法研究与应用等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于微电网群、综合能源系统等场景下的经济调度优化;②为秃鹰算法及其他群体智能算法的改进、复现与性能对比提供参考范例;③服务于科研仿真、算法验证及工程化应用需求。; 阅读建议:建议读者结合文中提供的Matlab代码实现进行实践操作,重点关注算法改进机制与调度模型的构建逻辑,同时可借助网盘资源获取完整资料,以加深对算法性能表现与应用场景的理解。

16,550

社区成员

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

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

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