在vc++中是否无法手工加入自定义的类?

LANDFISH 2001-07-19 01:21:15
我在编程的时候在工程中添加了一个类,但是没有使用vc++里头的insert new class,为了省事我自己写了类声明和定义,但是编译时总是同不过,编译器报错:
c:\srt\srtanalys\graphdeal.c(3) : fatal error C1853: 'Debug/SrtAnalys.pch' is not a precompiled header file created with this compiler

请问这是为什么啊?难道vc++中不能自己添加类?
...全文
177 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
蒋晟 2001-09-03
  • 打赏
  • 举报
回复
rebuild all
magicblue 2001-09-03
  • 打赏
  • 举报
回复
我来拿分
你这个问题我想是因为框架已经由多种模式写成,想做一些更改而又超出了框架的功能范围时或更改方式不按照框架所要求的便会失败
LANDFISH 2001-07-21
  • 打赏
  • 举报
回复
#include stdafx.h 我加了呀,而且是在所有语句之前加的。
coolxiao 2001-07-21
  • 打赏
  • 举报
回复
人家就是想弄明白vc是怎么样工作的,为什么一定要逼人家用classwizard呢?
这个问题我也有困惑,希望大家详细讲一下吧。分数小问题啦,谢谢!
yajunmao 2001-07-21
  • 打赏
  • 举报
回复
select new class in wizard bar not menu bar
then select generic option in dialog
ok
wintenko 2001-07-21
  • 打赏
  • 举报
回复
用classWizard不是挺好么,干吗没事找事。
zzh 2001-07-21
  • 打赏
  • 举报
回复
你把头文件包括进去,而且最好使用宏定义,然后再重新编译一下所有程序
如果还有问题,把 .clw,opt等四个文件删除,然后再重新建立一次工程就可以了。
zb_china 2001-07-20
  • 打赏
  • 举报
回复
把这句放在文件最上边
zb_china 2001-07-20
  • 打赏
  • 举报
回复
kimo1980(ok) 说得很对。


stdafx.h是预编译头文件,该句之前的所有内容预编译,如果找不到这句则产生“fatal error C1010: unexpected end of file while looking for precompiled header directive”错误,意思为:在寻找预编译头指示时发生未预料的文件结束。
这是开发工具的特征,所以很多书上没有提及。
kimo1980 2001-07-19
  • 打赏
  • 举报
回复
关键是#include "stdafx.h"这句漏了.
LANDFISH 2001-07-19
  • 打赏
  • 举报
回复
TO Tasehouny(阿甘):
我已经加了你说的那几句了呀,可是重新编译整个工程的时候还是报错,我看了一下VC++自己生成的文件,在头文件里头只差那么几句:
#if !defined(AFX_GRAPHYDEAL_H__AFF9FBC9_551B_4646_AA56_AEE570CB783D__INCLUDED_)
#define AFX_GRAPHYDEAL_H__AFF9FBC9_551B_4646_AA56_AEE570CB783D__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
看样子好像也是防止重复编译的,可是我就是不明白为什么,我自己写得就不行。

还有就是,.PCH文件是什么文件啊?
red_eyes 2001-07-19
  • 打赏
  • 举报
回复
可以自己手动加入的。Tasehouny(阿甘)说的很有到理
rediori 2001-07-19
  • 打赏
  • 举报
回复
你先编译一下整个工程就成了, 是缺少 pch 文件的缘故
不解 2001-07-19
  • 打赏
  • 举报
回复
否,随你怎么加!!
dgb 2001-07-19
  • 打赏
  • 举报
回复
Project->Add to project->Files
添加自己定义的类即可
prog_st 2001-07-19
  • 打赏
  • 举报
回复
看看框架生成的类的模式,在修改自己的类
Tasehouny 2001-07-19
  • 打赏
  • 举报
回复
可以,当然可以,你的问题多半出在头文件上。

在头文件上,你应该养成好习惯
例如
#ifndef _YOU_HEAD_FILE_2001_07_18
#define _YOU_HEAD_FILE_2001_07_18

.....你的头声明
#endef

这样能防止重复包含
更重要的是你的头文件的包含顺序,例如:stdafx.h应该在你的CPP文件的头部,例如:
#include "stdafx.h"
#include "youheader.h"

如果这个顺序错了,你的错误就出现了

还有,如果是C接口的函数,可以这样定义

#ifdef __cplusplus
extern "c"
{
#endef

......youfun(...)

#ifdef __cplusplus
}
#endef

强制C++的编译器用C的风格编译。
RINGSDK包含界面库和图象库。 本项目为编译环境为VC6,需要先安装platform sdk.不断修改,会陆续上传其他相关文档及DEMO 设置: VC6菜单tools->Options,选择Directoris页,把include,lib目录加入到相应文件列表,如果要调试,需要把libsrc目录下的各个子目录加入到Source files文件列表。 工程依赖几个第三方库,需要先编译livsrc\free_lib下几个目录的工程,然后打开ringsdk.dsw编译。工程都已经设置好了,编译即可。 由于VC的智能提示不能识别界面库里的宏,因此建议安装VA(Visual.Assist) 创建基于RingSDK的工程: 新建一个Win32 Application的工程,不要让VC写任何代码,空的工程。然后选择菜单Project->settings..., 选择C/C++页,Category选择Code Generation,然后在Use run-time library选择: DEBUG选择Debug Multithreaded RELEASE选择MultiThreaded 工程设置完毕,然后可以加入CPP和H文件了。 库使用: 1、头文件: 头文件包含"ringmain.h"就可以,如果要使用图象库,还需要包含"ringdib.h" 2、窗口声明: 窗口定义为如下格式: BEGIN_SETUPWINDOW(窗口名,窗口型) BINNDID(对话框ID) //当窗口型是对话框才需要写这个宏,且是可选的,即不写也可以 BEGIN_DEF_VAR(初始化标记) //这里定义成员数据 END_DEF_VAR //这里定义成员函数 //定义窗口消息处理函数 BEGIN_DEFMSG DEFMSG(消息代码) DEFMSGEX(自定义消息处理函数名) ... DEFCMD(命令处理函数名) ... DEFNOTIFY(通知消息代码) END_DEFMSG(窗口名) END_SETUPWINDOW(窗口名) 这里对上面代码文进行说明: 窗口名:窗口名同时也是该窗口的对象名,比如窗口名为MainWindow,则该窗口名为RingWnd_MainWindow, 同时声明了RingWnd_MainWindow* MainWindow=NULL; 以后只要调用MainWindow = NewRingObj(MainWindow);然后MainWindow就可以使用了。 以上代码相当于: class RingWnd_MainWindow { ... } RingWnd_MainWindow* MainWindow=NULL; 名可以用RINGCLASS(窗口名)宏来得到 窗口型:为IS_WINDOW,IS_MDIFRAME,IS_MDICHILD,IS_DIALOG,IS_PROPPAGE,IS_PROPSHEET这几个值之一,一看名称就知道,不需要多讲了。 其实这个只是声明了窗口是从哪个继承。 初始化标记:为NEED_INIT和NO_INIT两个值之一,指定了是否需要成员数据的初始化,一般成员数据的初始化可以在WM_CREATE消息里完成, 如果需要事先初始化,可以指定NEED_INIT,但是需要在CPP文件实现一个INITWINDOW(窗口名)的函数,进行初始化。 这个BEGIN_DEF_VAR(初始化标记)和END_DEF_VAR是可选的,即可以不写这两个宏,一样可以声明成员数据或函数。 消息代码:窗口消息代码,例:WM_CREATE 自定义消息处理函数名:响应自定义消息的处理函数,这个可以随便取名,例:OnCustomMessage 命令处理函数名:响应菜单命令或控件命令的处理函数,这个可以随便取名,例:OnOpenFile,OnButton1Click 通知消息代码:控件的通知消息代码,例:LVN_SELECTCHANGE 对话框ID:当窗口型是对话框才需要写这个宏,且是可选的,即不写也可以。写了这句,对话框创建时可以不写参数,例: BEGIN_SETUPWINDOW(DlgAbout,IS_DIALOG) BINDID(IDD_ABOUT) ...
--Shine Chen 1 进程内 COM 组件的实现 1 实验目的 Microsoft 的 COM(Component Object Model)是目前比较流行的软件开发技术之一,它是基于组件 模型的一种规范。本实验实际演示一个 COM 组件的应用,加深对 COM 组件理论知识的理解。为简单 起见,使用的是进程内 COM 组件,即 COM 的服务器和客户端在同一个进程。 2 实验要求 本实验设计可以参照本人的论文《基于 COM 组件技术的研究》的内容,也是对本论文的实践检验。 相似之处不在赘述。总体要求是设计一个 COM 组件的服务器和一个客户端。服务器实现两个接口:数 字加法和字符串连接操作。 客户端是基于对话框的 MFC 程序, 有一个友好的界面来测试 COM 组件服务 器的功能。 3 实验平台和工具 Windows 操作系统、VC++6.0。 4 实验步骤 4.1 COM 服务器 为了方便本实验 COM 服务器实现使用的是 ATL(ActiveX Template Library)活动模板库,是一种 微软程序库,也是一套 C++模板库。使用 ATL 能够快速地开发出高效、简洁的代码,同时对 COM 组件 的开发提供最大限度的代码自动生成以及可视化支持。 COM 服务器的对象如下图 Object IUnknown IMath IStr 图 1 COM 服务器对象 具体的步骤如下: 1. 新建一个 ATL 工程 (Project) 。命名为 MyCom(如图 2),并选择 DLL 方式(如图 3)。 2 图 2 新建 ATL 工程 图 3 选择 DLL 说明: Dynamic Link Library (DLL) 表示建立一个 DLL 的组件程序。 Executable (EXE) 表示建立一个 EXE 的组件程序。 Service (EXE) 表示建立一个服务程序,系统启动后就会加载并执行的程序。 Allow merging of proxy/stub code 选择该项表示把"代理/存根"代码合并到组件程序,否则 需要单独编译,单独注册代理存根程序。 Support MFC 支持 MFC Support MTS 支持事务处理,即是否支持 COM+ 功能。 2. 增加 ATL 对象: 选择菜单 Insert\New ATL Object\Object 分\Simple Object 项目 (见图 4) 。 3 图 4 选择建立简单 COM 对象 说明:Object 普通组件。其可以选择的组件对象型很多,但本质上,就是让向导帮忙加上一些 默认接口。 3. 增加自定义 CMath(接口 IMath),见图 5。 图 5 填写名 4. 填写属性接口,见图 6。 图 6 选择属性 4 5. 添加接口成员函数 图 7 调出增加接口方法的菜单 图 8 增加接口函数 Add 说明: [in]表示参数方向是输入; [out]表示参数方向是输出; [out,retval]表示参数方向是输出,同时可以作为函数运算结果的返回值。 一个函数,可以有多个[in]、[out],但[retval]只能有一个,并且要和[out]组合后在最后一个位 置。 图 9 接口函数 5 实现代码如下: STDMETHODIMP CMath::Add(long n1, long n2, long * pnVal) { // TODO: Add your implementation code here * pnVal = n1 + n2; return S_OK; } 6. 添加第二个接口 IStr。 完成上述步骤后,打开 IDL 文件(双击 IMath 接口),手工添加代码,其 UUID 的每个组件,每 个接口都会不同。在下面的代码加入黑体部分: … //接口的完整描述 [ object, //表示本块描述的是一个接口 uuid(E34275D2-B3CA-4BCA-9AC7-0713ABE2F876), helpstring("IMath Interface"), //说明文字 pointer_default(unique) //定义接口函数参数所使用指针的默认属性 ] interface IMath : IUnknown //接口 IMath 派生自 IUnknown { //接口函数列表 [helpstring("method Add")] HRESULT Add([in] long n1, [in] long n2, [out,retval] long * pnVal); }; //增加接口代码 [ object, uuid(36A75A3F-94DE-47fe-AF51-0C0C65316A03), // 手工产生的 IID h

16,472

社区成员

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

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

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