VC常见问题108(三)

合集下载

VC常见问题三

VC常见问题三

(71)我怎样才能建立一个等待光标?调用 BeginWaitCursor 函数来启动等待光标,调用 EndWaitCursor 函数来结束等待光标。

要注意,二者都要调用 app 的成员函数,如下所示:AfxGetApp()->BeginWaitCursor();// 要做的事AfxGetApp()->EndWaitCursor();(72)我在MDI框架中有个 form 视窗。

它有个取消按钮,我需要当用户按取消按钮时可关闭form视窗。

我应该如何关闭该文档?调用 OnCloseDocument 函数。

(73)如何访问桌面窗口静态函数CWnd:: GetDesktopWindow 返回桌面窗口的指针。

下例说明了MFC函数CFrameWnd::BeginModalStae是如何使用该函数进入内部窗口列表的。

void CFrameWnd::BeginModalState (){…//first count all windows that need to be disabledUINT nCount=0HWND hWnd= :: GetWindow (:: GetDesktopWindow(), GW_CHILD)while (hWnd!=NULL){if (:: IsWindowEnabled (hwnd)&& CWnd::FromHandlePermanent (hWnd)!=NULL&& AfxIsDescendant (pParent->m_hWnd, hWnd)&& :: SendMessage (hWnd, WM_DISABLEMODAL, 0, 0)==0){++nCount}hWnd=:: GetWindow (hWnd, GW_HWNDNEXT)}…(74)什么是COLORREF? 我该怎样用它?COLORREF 是一个 32-bit 整型数值,它代表了一种颜色。

VC经典的编译错误解决办法(转载)-jacky的日志-网易博客

VC经典的编译错误解决办法(转载)-jacky的日志-网易博客

VC经典的编译错误解决办法(转载)-jacky的日志-网易博客VC经典的编译错误解决办法(转载)vc编程 2008-07-08 11:09:39 阅读39 评论0 字号:大中小订阅1、Fatal Error C1010: unexpected end of file while looking for precompiled header directive:编译时总出这个错误为什么?: fatal error C1010: unexpected end of file while looking for precompiled: header directive: 我查了msdn好像不是他说的错误原因.这是预编译头文件没有包括进来, 有两种解决办法。

(一) 是把所有的源程序文件前面都加上#include(二) 如果你不原意改变源文件就在菜单上选择Project->Settings... 选择相应的配置(如果你是用Debug方式编译,就选Debug方式,如果Release方式就用Release),然后把下面的源文件树打开,选择没有加上面那个include语句的文件,在右边把有关precompiled的项目取消或选成none precompiled之类的选项就成了.2、Linker Tools Error LNK2001: unresolved external symbol "symbol"学习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时,编译都已通过。

产生连接错误的原因非常多,尤其LNK2001错误,常常使人不明其所以然。

如果不深入地学习和理解VC++,要想改正连接错误LNK2001非常困难。

初学者在学习VC++的过程中,遇到的LNK2001错误的错误消息主要为:unresolved external symbol “symbol”(不确定的外部“符号”)。

C语言技术使用中常见问题及解决方法总结

C语言技术使用中常见问题及解决方法总结

C语言技术使用中常见问题及解决方法总结引言:C语言是一种广泛应用于软件开发领域的编程语言,但在使用过程中常常会遇到一些问题。

本文将总结一些C语言技术使用中常见的问题,并提供相应的解决方法,帮助读者更好地应对这些问题。

一、编译错误在使用C语言进行开发时,编译错误是一种常见的问题。

编译错误通常由语法错误、缺少头文件或者函数未定义等问题引起。

解决方法包括仔细检查代码语法、确保所有需要的头文件都被包含以及检查函数是否正确定义。

二、内存管理问题C语言中没有自动垃圾回收机制,因此内存管理是开发过程中需要特别关注的问题。

常见的内存管理问题包括内存泄漏和野指针。

解决方法包括及时释放不再使用的内存、避免未初始化的指针以及使用合适的内存分配和释放函数。

三、数组越界问题数组越界是C语言中常见的错误之一。

当访问数组时超出了其边界,就会导致未定义的行为。

解决方法包括确保数组的索引在合法范围内、使用循环结构时注意循环变量的取值范围以及使用边界检查函数来避免越界访问。

四、死循环问题死循环是指程序中的循环结构无法终止,导致程序无法继续执行下去。

常见的死循环问题包括循环条件错误、循环变量更新错误以及循环体内部的逻辑错误。

解决方法包括仔细检查循环条件、确保循环变量能够正确更新以及检查循环体内部的逻辑是否正确。

五、代码重复问题代码重复是指在程序中多次出现相同或类似的代码段。

代码重复不仅增加了代码量,还增加了维护和修改的难度。

解决方法包括使用函数或宏来封装重复的代码、使用循环结构来替代重复的代码段以及使用代码生成工具来自动生成重复的代码。

六、性能优化问题在开发过程中,性能优化是一个重要的考虑因素。

常见的性能优化问题包括不必要的计算、重复的函数调用以及低效的算法。

解决方法包括避免不必要的计算、尽量减少函数调用次数以及选择合适的算法和数据结构。

七、调试技巧调试是解决问题的关键步骤,但有时候也会遇到一些困难。

在调试过程中,可以使用断点、打印调试信息以及使用调试工具来帮助定位问题。

C语言技术的常见问题及解决方案

C语言技术的常见问题及解决方案

C语言技术的常见问题及解决方案C语言作为一门广泛应用于软件开发和系统编程的编程语言,常常出现一些问题困扰开发者。

本文将讨论一些常见的C语言技术问题,并提供相应的解决方案。

问题一:内存泄漏在C语言编程中,内存泄漏是一个常见但又令人头疼的问题。

内存泄漏指的是在动态内存分配之后,没有正确释放该内存导致系统无法再次使用。

解决方案:为了避免内存泄漏,必须始终确保在使用完动态分配的内存后进行释放。

使用free函数来释放之前使用malloc或calloc函数分配的内存块。

此外,应该避免在循环中重复分配内存,以免造成内存泄漏和性能问题。

问题二:指针问题指针是C语言的一个重要特性,但也常常出现一些问题。

指针问题包括未初始化指针、指针越界、野指针等。

解决方案:避免指针问题的关键是始终确保指针的正确初始化和使用。

在声明指针变量时,应该将其初始化为NULL以避免成为野指针。

另外,访问指针指向的内存时,应该确保不越界,可以通过检查指针是否为NULL或使用合适的边界检查来避免越界访问。

问题三:数组越界访问数组越界访问是指在访问数组元素时超出了数组的有效范围。

这会导致不可预测的结果,包括程序崩溃和数据损坏等问题。

解决方案:为了避免数组越界访问,开发者需要在编写代码时严格遵守数组索引的范围。

在使用循环或指针遍历数组时,必须确保不超过数组的边界。

在进行数组操作时,使用合适的条件判断语句来控制访问边界。

问题四:类型不匹配C语言是一种静态类型语言,要求变量的类型在声明时就确定并且不能更改。

类型不匹配问题包括不同类型之间的赋值错误、函数参数类型错误等。

解决方案:为了避免类型不匹配问题,开发者需要严格遵守变量类型的规定。

在进行变量赋值时,确保变量的类型匹配。

在使用函数时,检查函数参数的类型是否与函数声明一致,并根据需要进行合适的类型转换。

问题五:死循环死循环是指程序中的循环不会结束,导致程序陷入无限循环的状态。

这常常是由于循环条件错误或循环体内没有引入适当的循环退出条件造成的。

VC++常见错误提示

VC++常见错误提示

提示: 提示:function 'void main(void)' already has a body 若同一程序中出现两次void main(void)。 若同一程序中出现两次 。 提示: 提示:missing function header (old-style formal list?) 若程序中缺少void main(void)。 若程序中缺少 。
error :unclared identifier 使用未声明的变量(变量名拼写错误,没有标识头 使用未声明的变量(变量名拼写错误, 文件等)。 文件等)。 error C2143: syntax error: missing ':' before '{' 句法错误: ”前缺少“ 句法错误:“{”前缺少“;”。 warning C4035: 'f……': no return value 语句没有返回值。 “f……”的return语句没有返回值。 的 语句没有返回值 error C2082: redefinition of formal parameter 'bReset' 函数参数“ 函数参数“bReset”在函数体中重定义。 ”在函数体中重定义。
error C2011: 'C……': 'class' type redefinition 类“C……”重定义。 重定义。 重定义 error C2018: unknown character '0xa3' 不认识的字符‘0xa3’。(一般是汉字或中文标点符 。(一般是汉字或中文标点符 不认识的字符 。( 号,因为系统对中文环境下输入的符号,例如分号 因为系统对中文环境下输入的符号, 括号等,系统是不接受的) 括号等,系统是不接受的) fatal error C1004: unexpected end of file found 解决方法: 解决方法:由于程序中少了 ")" 或者 "}" 之类的符 编译器认为你的程序还没有写完.找出哪里漏掉了 号,编译器认为你的程序还没有写完 找出哪里漏掉了 编译器认为你的程序还没有写完 这些符号,加上就可以了 这些符号 加上就可以了

C语言技术中的常见问题及解决方案

C语言技术中的常见问题及解决方案

C语言技术中的常见问题及解决方案在学习和使用C语言的过程中,我们经常会遇到各种问题。

这些问题可能会让我们感到困惑和挫败,但是只要我们能够找到合适的解决方案,就能够克服这些困难,继续向前发展。

本文将介绍一些常见的C语言问题,并提供相应的解决方案。

1. 编译错误在编写C代码时,经常会遇到编译错误。

这些错误可能是因为语法错误、拼写错误、缺少头文件等原因造成的。

解决这些问题的关键在于仔细检查错误信息,并逐个排查可能的原因。

在编写代码时,可以使用一些集成开发环境(IDE)或文本编辑器,它们通常会在代码中标记出错误,并提供相应的建议。

2. 内存泄漏内存泄漏是指在程序中动态分配的内存没有被正确释放,导致内存资源的浪费。

这种问题可能会导致程序运行变慢,甚至崩溃。

为了避免内存泄漏,我们应该养成良好的内存管理习惯。

在使用malloc()或calloc()函数分配内存后,一定要记得使用free()函数释放内存。

另外,可以使用一些内存泄漏检测工具来帮助我们发现潜在的问题。

3. 数组越界在C语言中,数组越界是一个常见的错误。

当我们访问数组元素时,如果超出了数组的范围,就会导致程序出错。

为了避免数组越界问题,我们应该始终注意数组的大小,并在访问数组元素之前进行边界检查。

另外,可以使用一些静态分析工具来帮助我们检测潜在的数组越界问题。

4. 逻辑错误逻辑错误是指程序在逻辑上存在错误,导致程序输出与预期不符。

解决逻辑错误的关键在于仔细分析程序的逻辑,找出错误的原因。

可以使用调试器来逐步执行程序,并观察程序的行为。

另外,可以使用一些单元测试框架来帮助我们验证程序的逻辑是否正确。

5. 效率问题在编写C代码时,我们经常需要考虑程序的效率。

如果程序运行速度过慢,可能会影响用户体验。

为了提高程序的效率,我们可以采取一些优化措施,例如使用更高效的算法、减少不必要的计算和内存访问等。

另外,可以使用一些性能分析工具来帮助我们找出程序的瓶颈,并进行相应的优化。

VC常见的108个问题

VC常见的108个问题

VC常见的108个问题.txt2008太不正常了,一切都不正常!在这个关键时刻,中国男足挺身而出,向全世界证明:中国男足还是正常的!(1)如何通过代码获得应用程序主窗口的指针? 主窗口的指针保存在CWinThread::m_pMainWnd中,调用AfxGetMainWnd实现。

AfxGetMainWnd()->ShowWindow(SW_SHOWMAXMIZED)//使程序最大化.(2)确定应用程序的路径Use GetModuleFileName 获得应用程序的路径,然后去掉可执行文件名。

Example:TCHAR exeFullPath[MAX_PATH] // MAX_PATH在MFC中定义为260GetModuleFileName(NULL,exeFullPath,MAX_PATH)(3)如何在程序中获得其他程序的图标?两种方法:(1) SDK函数 SHGetFileInfo 或使用ExtractIcon获得图标资源的 handle,(2) SDK函数 SHGetFileInfo 获得有关文件的很多信息,如大小图标,属性, 类型等. Example(1):在程序窗口左上角显示NotePad图标.void CSampleView::OnDraw(CDC * pDC){if( ::SHGetFileInfo(_T("c:\\pwin95\\notepad.exe"),0,&stFileInfo,sizeof(stFileInfo),SHGFI_ICON)){pDC ->DrawIcon(10,10,stFileInfo.hIcon);}}Example(2):同样功能,Use ExtractIcon Functionvoid CSampleView::OnDraw(CDC *pDC){HICON hIcon=::ExtractIcon(AfxGetInstanceHandle(),_T("NotePad.exe"),0);if (hIcon && hIcon!=(HICON)-1))pDC->DrawIcon(10,10,hIcon);}说明: 获得notepad.exe的路径正规上来说用GetWindowsDirectory函数得到, 如果是调用win95下的画笔,应该用访问注册表的方法获得其路径,要作成一个比较考究的程序,考虑应该全面点.(4)获得各种目录信息Windows目录: Use "GetWindowsDirectory"Windows下的system目录: Use "GetSystemDirectory"temp目录: Use "GetTempPath"当前目录: Use "GetCurrentDirectory"请注意前两个函数的第一个参数为目录变量名,后一个为缓冲区后两个相反.(5)如何自定义消息1) 手工定义消息,可以这么写#define WM_MY_MESSAGE(WM_USER+100),MS推荐的至少是WM_USER+100(2)写消息处理函数,用WPARAM,LPARAM返回LRESULT.LRESULT CMainFrame::OnMyMessage(WPARAM wparam,LPARAM lParam){//加入你的处理函数}(6)如何改变窗口的图标?向窗口发送 WM_SETICON消息。

VC常见错误与解决方法

VC常见错误与解决方法

1.源文件名称
错误:2-3.txt
正确:2-3.c或2-3.cpp
2.同时编辑、运行多个源文件
错误:同时编辑、运行多个源文件,可是运行的总不是自己当前编辑的。

正确:每次只编辑、运行1个源文件。

3.VC出现故障
错误:不能编译、运行。

正确:先保存文件!按Ctrl+Alt+Del,启动任务管理器,点“进程”选项卡,找到MSDEV.EXE,点“结束进程”,点“是”即可。

4.修改代码后运行没有变化
错误:点“!”按钮时你选择了No。

正确:点“!”按钮时选择Yes。

5.编译时出现error,不能运行,不知道怎么办
正确:在output窗口中,找到第1个error,双击此行,看看提示信息,错误的位置大部分在此行及其之前的几行,剩下的就是你的英语水平了,不会就copy那些信息,去google或者百度。

VC中常遇到的问题

VC中常遇到的问题

(1)为什么某个类突然在工作区间里面突然看不见了?只是类隐藏了,打开FILEVIEW,找到隐藏类的头文件,随便敲一下键盘的空格键,类就会在CLASSVIEW 中显示了(2)在基于对话框的程序中,一按回车键,对话框就没了。

把确定按纽的缺省属性前面的对勾去掉,重载OnOk()函数,在OnOk()函数里注释掉调用基类的OnOk()函数那行代码(3)为什么我的VC6.0自动显示成员列表功能时有时无?删除该项目扩展名为.ncb文件,重新打开该项目。

(4)孙老师的视频教程第一课的程序,为什么在我机子上不行?选菜单project->settings...在弹出的对话框中选Link,在最下边有Project Options,把里边的/subsystem:console 删除就可以了(5)如何干净的删除一个类?先从workspace中的fileview中删除对应的.h和.cpp文件;再关闭项目,从实际的文件夹中删除对应的.h 和.cpp文件;再删除.clw文件。

最后打开项目,rebuild all。

(6)网络编程一课中的聊天室程序在为什么老是绑定失败?一般这种问题是端口设置在6000监听,正好和QQ的端口冲突,多换几个端口试试就可以了(7)网络程序只能在debug运行,release不行,提示错误error LNK2001: unresolved external symbol __imp__WSAStartup@8,在Release下仍然需要添加Ws2_32.lib。

(8)我画了一条直线但是当窗口最大化时或者被其他窗口覆盖时,直线不见了,只剩下直线原先存在的窗口这是因为窗口重绘,你可以在响应WM_PAINT的OnDraw()函数中添加画线的代码(9)在安装VC时未安装MSDN, 自己再用MSDN安装盘安装后在VC中按F1无法调用?修改注册表是最直接的方法,具体过程如下:在HKEY_CURRENT_USER/Software/Microsoft/DevStudio/6.0/Help下增加Enable,Filename,State三个主键,注意其类型,含义如下: Enable 类型:DWORD,默认值是1,改变为0x00000001 Filename 类型:字符串改为c:\program files\....\MSDev98\help\Msdev.hlp State 类型:DWORD 默认值为0,改变为0x00000001 (10)如何在应用程序中打开一个超级链接?这个问题实际上很简单,只要使用ShellExecute API函数就行了(11)如何在没安装VC的环境下的机器也能打开运行用MFC编写的程序?把编译模式改为RELEASE,然后点工程-》设置-》常规,选择使用MFC作为静态连接库(12)如何自定义一个消息?1)#define WM_MY_MESSAGE WM_USER+1;2)头文件DECLARE_MESSAGE_MAP()前写消息响应函数原形;3)在BEGIN_MESSAGE_MAP添加消息到函数的映射;4)写函数的实现部分。

VC 常见调试错误代码

VC  常见调试错误代码

-----------------首先说下最常见的link错误处理办法:在创建MFC项目时, 不使用MFC AppWizard向导, 如果没有设置好项目参数, 就会在编译时产生很多连接错误, 如error LNK2001错误, 典型的错误提示有:libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _mainLIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16 msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16 nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadexnafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex 下面介绍解决的方法:1. Windows子系统设置错误, 提示:libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main Windows项目要使用Windows子系统, 而不是Console, 可以这样设置:[Project] --> [Settings] --> 选择"Link"属性页,在Project Options中将/subsystem:console改成/subsystem:windows2. Console子系统设置错误, 提示:LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16 控制台项目要使用Console子系统, 而不是Windows, 设置:[Project] --> [Settings] --> 选择"Link"属性页,在Project Options中将/subsystem:windows改成/subsystem:console3. 程序入口设置错误, 提示:msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16 通常, MFC项目的程序入口函数是WinMain, 如果编译项目的Unicode版本, 程序入口必须改为wWinMainCRTStartup, 所以需要重新设置程序入口:[Project] --> [Settings] --> 选择"C/C++"属性页,在Category中选择Output,再在Entry-point symbol中填入wWinMainCRTStartup, 即可4. 线程运行时库设置错误, 提示:nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadexnafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex 这是因为MFC要使用多线程时库, 需要更改设置:[Project] --> [Settings] --> 选择"C/C++"属性页,在Category中选择Code Generation,再在Use run-time library中选择Debug Multithreaded或者multithreaded其中,Single-Threaded 单线程静态链接库(release版本)Multithreaded 多线程静态链接库(release版本)multithreaded DLL 多线程动态链接库(release版本)Debug Single-Threaded 单线程静态链接库(debug版本)Debug Multithreaded 多线程静态链接库(debug版本)Debug Multithreaded DLL 多线程动态链接库(debug版本)单线程: 不需要多线程调用时, 多用在DOS环境下多线程: 可以并发运行静态库: 直接将库与程序Link, 可以脱离MFC库运行动态库: 需要相应的DLL动态库, 程序才能运行release版本: 正式发布时使用debug版本: 调试阶段使用例如,当我们不在MFC创建的环境下(console appllication),使用CString类等等,那么就会出现nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadexnafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex 错误,这时可以按照上面的方法,设置Code Generation为Debug Multithreaded,即可解决问题。

VC安装失败的一些解决方案

VC安装失败的一些解决方案

VC安装失败的一些解决方案VC(Visual C++)是一种编程语言,用于开发Windows平台上的应用程序。

在进行VC安装过程中,可能会出现各种失败的情况。

以下是一些解决VC安装失败的常见问题和解决方案。

1.安装程序无法启动或一直停留在启动页面:- 确保系统已经完成所有的更新:打开Windows更新,检查并安装所有可用的更新。

-关闭临时停用任何防火墙或杀毒软件:有时,安全软件可能会阻止安装程序运行。

暂时关闭安全软件,然后尝试重新运行安装程序。

2.安装程序报告错误代码:-在错误代码上:将错误代码输入引擎,找到相关的解决方案并跟随指示进行修复。

- 运行Windows安装程序故障排除工具:Windows提供了一套用于识别和解决安装问题的工具。

在Windows设置中并运行“故障排除”,然后选择“修复Windows程序包安装”。

3.安装程序卡在其中一步骤上无法继续:-检查硬件兼容性:一些VC版本可能对硬件有特定的要求。

确保计算机的硬件满足VC版本的要求。

- 清理临时文件夹:在Windows资源管理器中,选择计算机的主驱动器,然后右键单击并选择“属性”。

在“常规”选项卡上,单击“磁盘清理”,然后选择您想要清理的文件类型。

然后,单击“确定”并等待清理完成。

4.安装程序在安装过程中崩溃或突然停止运行:- 更新操作系统:确保计算机上的Windows操作系统已更新到最新版本,以获取最新的安全修复和错误修复。

-禁用非必要的启动项目:运行MSCONFIG并在“启动”选项卡上禁用所有非系统必需的启动项目。

然后,重新启动计算机并尝试重新运行安装程序。

- 运行SFC扫描:在命令提示符中,键入“sfc /scannow”并按Enter键。

该命令将扫描并修复操作系统文件中的任何损坏。

C语言技术的常见问题及解决方案

C语言技术的常见问题及解决方案

C语言技术的常见问题及解决方案C语言作为一种广泛应用于计算机编程的编程语言,经常会遇到一些常见问题。

本文将探讨一些常见的C语言技术问题,并提供相应的解决方案。

一、内存管理问题在C语言中,内存管理是一个常见的问题。

如果程序没有正确地分配和释放内存,可能会导致内存泄漏或者内存溢出的问题。

为了避免这些问题,可以采取以下措施:1. 使用动态内存分配函数:C语言提供了malloc和free函数,用于动态分配和释放内存。

在使用这些函数时,要确保在不再使用内存时及时释放,以避免内存泄漏。

2. 避免指针错误:指针错误是常见的内存管理问题之一。

在使用指针时,要确保指针指向有效的内存地址,并避免对空指针进行操作。

二、数组越界访问问题在C语言中,数组越界访问是一个常见的错误。

当程序试图访问数组的索引超出数组的边界时,会导致程序崩溃或产生未定义的行为。

为了避免这个问题,可以采取以下措施:1. 确保数组索引在有效范围内:在使用数组时,要确保数组索引在有效范围内,即大于等于0且小于数组长度。

2. 使用循环控制数组访问:在使用循环遍历数组时,要确保循环变量的取值范围在数组的有效索引范围内,以避免越界访问。

三、类型转换问题在C语言中,类型转换是一个常见的问题。

当程序试图将不兼容的数据类型进行强制转换时,可能会导致数据丢失或产生不正确的结果。

为了避免这个问题,可以采取以下措施:1. 使用适当的类型:在编写程序时,要选择适当的数据类型来存储和处理数据,以避免不必要的类型转换。

2. 使用合适的转换函数:C语言提供了多种类型转换函数,如atoi、atof等,可以将字符串转换为整数或浮点数。

在进行类型转换时,要使用合适的转换函数,并进行错误处理。

四、逻辑错误问题在C语言中,逻辑错误是一个常见的问题。

当程序的逻辑不正确时,可能会导致程序产生错误的结果。

为了避免这个问题,可以采取以下措施:1. 仔细检查程序逻辑:在编写程序时,要仔细检查程序的逻辑是否正确,并进行必要的测试和调试。

安装、使用vc 遇到的问题及解决

安装、使用vc  遇到的问题及解决

感言: 真是久病成良医啊!1. C语言中出现“Compiling... Error spawning cl.exe ”是什么意思?怎么解决?很多人在安装VC 6.0后有过点击“Compile”或者“Build”后被出现的“Compiling... ,Error spawning cl.exe”错误提示给郁闷过。

很多人的选择是重装,实际上这个问题很多情况下是由于路径设置的问题引起的,“CL.exe”是VC使用真正的编译器(编译程序),其路径在“VC根目录\VC98\Bin”下面,你可以到相应的路径下找到这个应用程序。

因此问题可以按照以下方法解决:打开vc界面点击VC“TOOLS(工具)”—>“Option(选择)”—>“Directories(目录)”重新设置“Excutable Fils、Include Files、Library Files、Source Files”的路径。

很多情况可能就一个盘符的不同(例如你的VC装在C,但是这些路径全部在D),改过来就OK了。

如果你是按照初始路径安装vc6.0的,路径应为:executatble files:C:\Program Files\Microsoft Visual Studio\Common\MSDev98\BinC:\Program Files\Microsoft Visual Studio\VC98\BINC:\Program Files\Microsoft Visual Studio\Common\TOOLSC:\Program Files\Microsoft Visual Studio\Common\TOOLS\WINNTinclude files:C:\Program Files\Microsoft Visual Studio\VC98\INCLUDEC:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDEC:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDElibrary files:C:\Program Files\Microsoft Visual Studio\VC98\LIBC:\Program Files\Microsoft Visual Studio\VC98\MFC\LIBsource files:C:\Program Files\Microsoft Visual Studio\VC98\MFC\SRCC:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDEC:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDEC:\Program Files\Microsoft Visual Studio\VC98\CRT\SRC如果你装在其他盘里,则仿照其路径变通就行。

学习VC遇到的问题解决

学习VC遇到的问题解决

(2)如果没有为wWinMainCRTStartup设定程序入口,在使用Unicode和MFC时将出现“unresolved external on _WinMain@16”的LNK2001错误信息。
Hale Waihona Puke (3)使用/MD选项编译时,既然所有的运行库都被保留在动态链接库之内,源文件中对“func”的引用,在目标文件里即对“__imp__func”的引用。如果试图使用静态库LIBC.LIB或LIBCMT.LIB进行链接,将在__imp__func上发生LNK2001错误。如果不使用/MD选项编译,在使用MSVCxx.LIB链接时也会发生LNK2001错误。
<2>由于编译和联机的设置而造成的LNK2001错误
(1)如果编译时使用的是/NOD(/NODERAULTLIB)选项,程序所需要的运行库和MFC时将得到又编译器写入目标文件模块,但除非在文件中明确包含这些库名,否则这些库不会被链接进工程文件。这种情况下使用/NOD将导致LNK2001错误
11. 如何再ClassWizard中选择未列出的信息
打开“ClassWizard”对话框,然后切换到“Class Info”页面。改变“Message filter”,如选择“Window”,“Message”页面就会出现Window的信息。
12. 如何检测程序中的括号是否匹配
(4)使用/ML选项编译时,如用LIBCMT.LIB链接会在_errno上发生LNK2001错误。
(5)当编译调试版的应用程序时,如果采用发行版模态库进行链接也会产生LNK2001错误;同样,使用调试版模态库链接发行版应用程序时也会产生相同的错误。
(6)不同版本的库和编译器的混合使用也能产生问题,因为新版的库里可能包含早先的版本没有的符号和说明。

vc中的使用技巧和常见错误

vc中的使用技巧和常见错误

vc中的使用技巧和常见错误1、在数据库操作时,将系统自动生成的CTime替换成COleDateTime。

2、在操作ACCESS数据库时,字符串的标识是:单引号;日期/时间类型的标识是:#3、将 DDX_FieldDateTimeCtrl(pDX, IDC_PUBLISHDATE, m_pSet->m_publishDate,m_pSet); 替换成:DDX_DateTimeCtrl(pDX, IDC_PUBLISHDATE, m_pSet->m_publishDate);注:这是VC6里的一个老BUG,好像SP6里也是那样。

4、遇到ClassView里的某个类突然丢失时可以把项目文件夹下的扩展名为.ncb和.opt的两个文件删掉,再重新打开项目。

遇到类下的成员函数定位不准,即双击该函数时并不能准确定位到指定位置时,可以把debug或release(这要视你当时选择的MODE来定)下的扩展名为:.pch的文件删掉;如还不行,就再把上面两个文件也一起删掉,再不行,,我也搞不定了,只好建议你跑出门去,对着天空大喊三声:“神啊,救救我吧!”5、如果你很喜欢VC6的auto-complete功能,而发觉他与系统的Ctrl+Space输入法冲突了,建议如下:Menu“Tools”->“Customize”->"Keyword",选择分类为:"All commands",鼠标点击all commands里面,敲击“comple...”就出来了,在右侧重新添加一个“Shift+Space”并Assign就行了。

这一点VC6要比delphi6好,在delphi6及以后的版本里,autocomplete功能已经做的很好了,当然以前的版本吗, autocomplete慢的跟什么似的,但很遗憾,我至今未找到能够自定义快捷方式的地方,好像只能用"Ctrl+Space",哪位大虾知道告诉我,另外delphi6下也可以Ctrl+J,这个VC6里没有,不过装了Visual Assist6就行了。

C语言技术使用中的常见问题解决方案与解答

C语言技术使用中的常见问题解决方案与解答

C语言技术使用中的常见问题解决方案与解答在学习和使用C语言技术的过程中,我们常常会遇到一些问题,这些问题可能是语法错误、编译错误、逻辑错误等。

本文将探讨一些常见的C语言技术问题,并提供解决方案与解答。

一、语法错误语法错误是我们在编写C语言程序时最常见的问题之一。

当我们违反了C语言的语法规则时,编译器会报错并指出错误的位置。

常见的语法错误包括拼写错误、缺少分号、括号不匹配等。

解决方案:仔细检查代码,确保语法规则的正确性。

可以使用IDE(集成开发环境)来帮助我们检测语法错误,并提供错误提示。

例如,下面的代码中漏掉了一个分号:```c#include <stdio.h>int main() {printf("Hello, world!")return 0;}```编译器会提示错误:`expected ';' before 'return'`。

我们只需在printf语句的末尾添加分号即可解决问题。

二、编译错误编译错误是指在编译过程中出现的错误。

这些错误可能是由于语法错误、链接错误、库文件缺失等引起的。

解决方案:仔细阅读编译器的错误提示信息,根据提示信息来定位错误的位置。

通常,编译器会提供错误的行号和错误的类型,我们可以根据这些信息来找出错误的原因。

例如,下面的代码中使用了一个未声明的变量:```c#include <stdio.h>int main() {int a = 10;printf("The value of b is: %d", b);return 0;}```编译器会提示错误:`‘b’ undeclared (first use in this function)`。

这意味着变量b未被声明。

我们只需在使用变量b之前先声明它即可解决问题。

三、逻辑错误逻辑错误是指程序在运行过程中出现的错误,这些错误通常是由于代码的逻辑错误或算法设计错误引起的。

VC常见错误提示

VC常见错误提示

VC常见错误提示


3、error C2011: 'C……': 'class' type redefinition 类“C……”重定义。
4、error C2018: unknown character '0xa3' 不认识的字符'0xa3'。(一般是汉字或中文标点符号,要改用英文标点符号) 5、error C2057: expected constant expression 希望是常量表达式。(一般出现在switch语句的case分支中) 6、error C2065: 'a' : undeclared identifier “a”:未声明过的标识符。要进行变量的声明定义 7、error C2143: syntax error: missing ':' before '{' 句法错误:“{”前缺少“;”。 8、error C2146: syntax error : missing ';' before identifier 'dc' 句法错误:在“dc”前丢了“;”。


Байду номын сангаас
1、fatal error C1010: unexpected end of file while looking for precompiled header directive。 寻找预编译头文件路径时遇到了不该遇到的文件尾。(一般是没有#include “stdio.h”) 2、fatal error C1083: Cannot open include file: 'R…….h': No such file or directory 不能打开包含文件“R…….h”:没有这样的文件或目录。

C语言技术使用中常见问题解决方案精选

C语言技术使用中常见问题解决方案精选

C语言技术使用中常见问题解决方案精选C语言作为一种通用的编程语言,广泛应用于各个领域中。

然而,在使用过程中,我们常常会遇到一些问题,影响我们的编程效率和质量。

本文将为大家分享一些常见的C语言技术问题,并提供解决方案,帮助大家更好地使用C语言进行编程。

一、内存泄漏问题及解决方案在C语言中,内存泄漏是一个常见的问题。

当我们动态分配了内存空间后,如果没有及时释放,就会导致内存的浪费和不必要的性能损失。

以下是一些常见的内存泄漏问题及解决方案:1.未释放堆内存:在使用malloc()函数动态分配内存后,要确保使用free()函数及时释放内存空间。

```c// 未释放堆内存示例int* p = (int*)malloc(sizeof(int));// 其他代码```解决方案:添加释放内存的语句```cfree(p);```2.循环中频繁动态分配内存:在循环体中频繁地使用malloc()函数动态分配内存,会导致内存的频繁分配和释放,影响性能。

解决方案:在循环体外部使用一次性分配内存的方式,尽量避免循环内部频繁动态分配内存。

二、指针问题及解决方案指针是C语言中重要的概念,也是初学者容易出现问题的地方。

以下是一些常见的指针问题及解决方案:1.野指针:当指针指向一个无效的内存地址时,称之为野指针。

对野指针进行操作会导致程序异常或崩溃。

解决方案:在使用指针之前,要确保指针指向一个有效的内存地址,或者使用NULL对指针进行初始化。

```cint* p = NULL; // 初始化指针为NULL```2.空指针:空指针是指未被初始化的指针,在使用空指针时,会导致程序异常或崩溃。

解决方案:在使用指针之前,要确保指针已经被正确初始化。

三、数组越界问题及解决方案在使用数组时,越界访问是一个常见的错误。

越界访问会导致程序出现未定义行为或崩溃。

以下是一些常见的数组越界问题及解决方案:1.数组下标越界访问:当我们使用一个超过数组长度的下标访问数组元素时,会导致越界访问。

掌握C语言技术的常见问题解决方案

掌握C语言技术的常见问题解决方案

掌握C语言技术的常见问题解决方案C语言作为一门广泛应用于软件开发和系统编程的编程语言,常常会遇到一些问题。

在这篇文章中,我们将探讨一些常见的C语言技术问题,并提供相应的解决方案。

1. 内存泄漏内存泄漏是C语言中常见的问题之一。

它指的是程序在动态分配内存后,没有正确释放这些内存,导致内存资源无法被再次使用。

为了避免内存泄漏,我们应该养成良好的编程习惯,及时释放不再使用的内存。

可以使用free()函数来释放动态分配的内存,确保在不需要使用时将其释放。

2. 数组越界数组越界是指在访问数组元素时超出了数组的边界。

这可能导致程序崩溃或产生不可预测的结果。

为了避免数组越界问题,我们应该始终确保在访问数组元素之前检查数组的边界。

可以使用条件语句或循环来检查数组索引是否有效,并在索引无效时采取相应的措施,如打印错误信息或终止程序的执行。

3. 指针问题指针是C语言中的重要概念,但也容易引发一些问题。

常见的指针问题包括空指针引用、野指针和指针未初始化等。

为了避免这些问题,我们应该始终确保指针在使用之前被正确初始化,并在不再使用时将其置为NULL。

此外,还应该避免对空指针进行解引用操作,以防止程序崩溃。

4. 死循环死循环是指程序中的一个循环结构无法正常终止,导致程序无法继续执行下去。

死循环可能是由于循环条件错误或循环体中的控制语句错误引起的。

为了避免死循环问题,我们应该仔细检查循环条件,并确保在循环体中有正确的控制语句,如break或return,以便在满足某个条件时终止循环。

5. 编译错误编译错误是指在编译程序时出现的错误,常常是由于语法错误、拼写错误或缺少必要的库文件等引起的。

为了解决编译错误,我们应该仔细检查程序代码,确保语法正确无误,并确保所需的库文件已正确链接。

此外,编译器通常会提供详细的错误信息,我们应该仔细阅读并理解这些错误信息,以便更好地定位和解决问题。

6. 调试技巧调试是解决问题的关键步骤之一。

在C语言中,我们可以使用调试器来逐行执行程序代码,查看变量的值和程序的执行流程,以便更好地理解程序的行为并找出问题所在。

C语言技术使用中的常见问题解决方案

C语言技术使用中的常见问题解决方案

C语言技术使用中的常见问题解决方案C语言是一种广泛应用于软件开发领域的编程语言,但在实际使用中,我们常常会遇到一些问题。

本文将探讨一些C语言技术使用中的常见问题,并提供解决方案。

一、内存管理问题在C语言中,内存管理是一个常见的问题。

如果不正确地管理内存,可能会导致内存泄漏或者访问非法内存的问题。

为了解决这个问题,我们可以采取以下几个方面的措施:1. 使用动态内存分配函数:C语言提供了malloc、calloc和realloc等函数来进行动态内存分配。

使用这些函数可以在运行时分配所需的内存空间,并在不需要时进行释放,避免内存泄漏的问题。

2. 避免使用未初始化的指针:在使用指针变量之前,应该先将其初始化为NULL。

这样可以避免指针悬空的问题,减少访问非法内存的风险。

3. 注意内存的释放:在使用完动态分配的内存后,应该及时使用free函数将其释放。

否则,会造成内存泄漏,导致系统性能下降。

二、错误处理问题在C语言中,错误处理是一个重要的问题。

由于C语言没有提供异常处理机制,我们需要自己处理可能出现的错误。

以下是一些常见的错误处理方案:1. 错误码返回:在函数执行过程中,如果出现错误,可以通过返回错误码的方式来通知调用者。

调用者可以根据错误码来判断是否发生了错误,并采取相应的处理措施。

2. 异常处理函数:可以定义一个专门的异常处理函数,用来处理程序中可能出现的异常情况。

在出现异常时,可以调用该函数进行处理,以保证程序的正常运行。

3. 日志记录:将程序的运行日志记录下来,可以帮助我们更好地定位和解决问题。

通过查看日志,我们可以了解程序在哪个环节出现了问题,从而快速定位并解决错误。

三、性能优化问题在C语言中,性能优化是一个关键问题。

以下是一些常见的性能优化方案:1. 减少函数调用次数:函数调用会带来一定的开销,特别是在循环中频繁调用的函数。

我们可以通过将一些常用的代码直接嵌入到主函数中,减少函数调用次数,从而提高程序的执行效率。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(73)如何访问桌面窗口静态函数CWnd:: GetDesktopWindow 返回桌面窗口的指针。

下例说明了MFC函数CFrameWnd::BeginModalStae是如何使用该函数进入内部窗口列表的。

void CFrameWnd::BeginModalState (){…//first count all windows that need to be disabledUINT nCount=0HWND hWnd= :: GetWindow (:: GetDesktopWindow(), GW_CHILD)while (hWnd!=NULL){if (:: IsWindowEnabled (hwnd)&& CWnd::FromHandlePermanent (hWnd)!=NULL&& AfxIsDescendant (pParent->m_hWnd, hWnd)&& :: SendMessage (hWnd, WM_DISABLEMODAL, 0, 0)==0){++nCount}hWnd=:: GetWindow (hWnd, GW_HWNDNEXT)}…(74)什么是COLORREF? 我该怎样用它?COLORREF 是一个32-bit 整型数值,它代表了一种颜色。

你可以使用RGB 函数来初始化COLORREF。

例如:COLORREF color = RGB(0, 255, 0);RGB 函数接收三个0-255 数值,一个代表红色,一个代表绿色,一个代表蓝色。

在上面的例子中,红色和蓝色值都为0,所以在该颜色中没有红色和蓝色。

绿色为最大值255。

所以该颜色为绿色。

0,0,0 为黑色,255,255,255 为白色。

另一种初始化COLORREF 的方法如下所示:CColorDialog colorDialog;COLORREF color;if( colorDialog.DoModal() == IDOK ){color = colorDialog.GetColor();}这段代码使用了MFC 中的颜色对话框,它需要文件。

(75)AppWizard所产生的STDAFX文件是干什么用的?它主要是协助产生预编译头文件的。

通常你是不需要修改它的。

(76)我在我的程序中是了CDWordArray。

我向它添加了约10,000个整数,这使得它变得非常非常慢。

为什么会这么糟?CDWordArray 是很好用的,只是因为你没有指定数组的最大尺寸。

因此,当你添加新元素时,该类会从堆中重新分配空间。

不幸的是,该类会在每次插入新元素时都为数组重新分配空间。

如果你向它添加了很多新元素,所有这些分配和复制数组的操作会就会使它变慢。

解决该问题的方法是,你可以使用SetSize 函数的第二个参数来改变这种重新分配的频率。

例如,如果你把该参数设置为500,则每次数组空间超出时它才重新分配并添加500 个新空间,而不是1 个。

这样一来,你就可以不用重新分配而添加了另外499 个元素空间,这也会大大提高程序的运行速度。

(77)我该如何改变MDI框架窗口的子窗口的大小以使在窗口以一定的大小打开?在视中的OnInitialUpdate 函数中调用GetParentFrame 函数。

GetParentFrame 会返回一指向一保存有该视的框架窗口的指针。

然后调用在框架窗口上调用MoveWindow。

(78)在我的程序的某些部分,我可以调用MessageBox 函数来建立一个信息对话框,例如在视类中。

但是,在其它部分我却不能,如文档类中。

为什么?我怎样才能在我的应用程序类中建立一个信息对话框?MessageBox 函数来自CWnd 类,所以你只能在从CWnd 继承的类( 如CView ) 中调用它。

但是,MFC 也提供了AfxMessageBox 函数,你可以在任何地方调用它。

(79)我需要在我的程序中设置全局变量,以使文档中的所有类都能访问。

我应该吧它放到哪儿?把该变量放到该应用程序类的头文件中的attribute 处。

然后,在程序的任何地方,你都可以用下面的方法来访问该变量:CMyApp *app = (CMyApp *)AfxGetApp();app->MyGlobalVariable = ...(80)我听说MFC可以发现内存漏洞,我怎样使用该特性?如果你在Debug 菜单中的Go 选项( 不是Project 菜单中的Execute 选项) 来运行你的应用程序,MFC 应该在程序终止时报告内存漏洞。

如果没有,那么试试运行MFC Tracer 工具程序( 在VC++ 程序组中),并启动跟踪。

然后返回应用程序。

(81)我怎样才能在我的应用程序中循环浏览已经打开的文档?使用CDocTemplate中未公开的GetFirstDocPosition()和GetNextDoc()函数。

(82)才能在我的应用程序中循环浏览已经打开的视?使用CDocument 中未公开的GetFirstViewPosition() 和GetNextView() 函数。

(83)数PreCreateWindow是干什么用的?PreCreateWindow 允许你在调用CreateWindow 之前来改变窗口属性。

(84)该怎样防止MFC在窗口标题栏上把文档名预置成应用程序名?在PreCreateWindow 函数中删除FWS_PREFIXTITLE 标志的窗口样式:cs.style &= ~FWS_PREFIXTITLE;(85)我应该怎样防止MFC在窗口标题栏上添加文档名?在PreCreateWindow 函数中删除FWS_ADDTOTITLE 标志的窗口样式:cs.style &= ~FWS_ADDTOTITLE ;(86)我应该如何改变视窗口的大小?因为视窗口实际上是框架窗口的子窗口,所以你必须改变框架窗口的大小,而不是改变视窗口。

使用CView 类中的GetParentFrame() 函数获得指向框架窗口的指针,然后调用MoveWindow() 函数来改变框架的大小。

这会使变尺寸的视充满框架窗口。

(87)我有一无模式对话框。

我怎样才能在窗口退出时删除CDialog对象?把“delete this”加到PostNcDestroy 中。

这主要用在需要自动删除对象的场合。

(88)为什么把“delete this”放在PostNcDestroy中而不是OnNcDestroy? OnNcDestroy 只被已建立的窗口调用。

如果建立窗口失败( 如PreCreateWindow ),则没有窗口处来发送WM_NCDESTROY 消息。

PostNcDestroy 是在对象窗口被完全删除,在OnNcDestroy 后,甚至在窗口建立失败之后调用的。

(89)File菜单中的MRU列表是从哪儿来的?列表中的名字放在哪儿了?我怎样才能改变列表中项目的最大值?在应用程序类的InitInstance 函数中对LoadStdProfileSettings 的调用中。

该调用接受一个参数( 在缺省情况下如果没有传递值则为 4 )。

MRU文件名是从INI 文件中调用的。

如果你有带有ID_FILE_MRU_FILE1 的ID 的菜单选项,它会为调入的MRU 列表所替换。

如果你改变传递给LoadStdProfileSettings 的数值( 最大为16 ),则你就改变了所装如文件名的最大值。

(90)我在菜单中添加了新的项。

但是,当我选该项时,在状态栏上没有出现任何提示信息。

为什么?打开资源文件中的菜单模板。

打开新菜单选项的属性对话框。

在对话框的底部的Prompt 编辑框中,你可以如下指定状态栏上的提示信息和工具栏上的提示信息( 如果你已经建立的工具栏按钮):Status bar string\nFlying tag(91)我怎样才能在应用程序的缺省系统菜单中加上一些东西?系统菜单与其它菜单类似,你可以添加或删除项目,这需要使用CMenu 类的成员函数。

下面的代码在你的系统菜单后面添加一个新菜单项:CMenu *sysmenu;sysmenu = m_pMainWnd->GetSystemMenu(FALSE);sysmenu->AppendMenu(MF_STRING, 1000, "xxx");参见MFC 帮助文件中的CMenu 类。

(92)我建立了一个对话框。

但是当我显示该对话框时,第一个编辑框总是不能获得焦点,我必须单击它来使它获得焦点。

我怎样才能使第一个编辑框在对话框打开时就获得焦点?打开资源编辑器中的对话框模板。

在Layout 菜单中选择Tab Order 选项。

按你的需求单击对话框中的控制来重新排列这些控制的tab 顺序。

(93)我怎样才能使一个窗口具有“always on top”特性?在调用OnFileNew 后,在你的InitInstance 函数中加上下面的代码:m_pMainWnd->SetWindowPos(&CWnd::wndTopMost,0,0,0,0, SWP_NOMOVE | SWP_NOSIZE);(94) 我要为我的form view添加文档模板。

我先建立了对话框模板,然后使用ClassWizard 建立了基于CFormView的新类,它也是从CDocument继承来的。

我还建立了相应的资源并在InitInstance中添加了新的文档模板。

但是,当我试图运行该程序时,出现了Assertion信息。

为什么?form 的对话框模板需要些特殊设置以便可用于CFromView。

确保这些设置的最简单方法是使用AppWizard 来建立CFormView 应用程序,并查看AppWizard 所建立的对话框模板所选择的Styles Properties。

你会发现该对话框模板具有下列样式:没有标题栏、不可见和“Child”。

把你的form view 的对话框属性变成这样就可以了。

(95) 我在一对话框中有一列表框,我需要tabbed列表框中的项目。

但是,当我处理含有tab字符(用AddString添加的)的列表项时,tab被显示成小黑块而没有展开。

哪儿出错了?在对话框模版中,打开列表框的属性。

确保选择了“Use Tabstops”样式。

然后,确保在对话框类中OnInitDialog 函数中调用SetTabStops。

(96) 我建立了一个应用程序,并使用了CRecordset类。

但是,当我运行该程序时,它试图要访问数据库,并给出“Internal Application Error”对话框。

相关文档
最新文档