旧文辑录

以前在很多不同的地方写过很多不同的东西,而且至今它们还贡献着访问量。如果丢弃掉不管了,不太好。但又不能零散地去管理,流量也浪费掉了。所以把它们集中起来,留下有用的内容放在这里,便于失去链接的页面能重新找回内容。以前写过一些题解,会放在别的地方,这里主要是杂文(其实也不多)。

acm.pku题型分类

(独立出来在这里便于查看)

[编译错误]fatal error C1010: 在查找预编译头指令时遇到意外的文件结尾

原文发表于 http://blog.csdn.net/StFairy/archive/2006/12/15/1444633.aspx

刚开始发现这个错误的时候,你可能不知道你错在哪里——准确地说,你根本就没有错!
我们在建立项目工程的时候,VS.NET自动为我们生成了两个叫 stdafx.h/.cpp 的文件,它们就是症结所在了。
打开 stdafx.h ,我们可以看到如下的文字:

// stdafx.h : 标准系统包含文件的包含文件,
// 或是常用但不常更改的项目特定的包含文件
//
#pragma once
#define WIN32_LEAN_AND_MEAN  // 从 Windows 头中排除极少使用的资料
// Windows 头文件:
#include <windows.h>
// C 运行时头文件
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
// TODO: 在此处引用程序要求的附加头文件

可能你在其他的资料中已经了解到它的作用是加快编译速度的;那么问题就在于,你在编写其他的cpp时,没有引用这个文件来加快编译速度!!——

#include "stdafx.h"

再编译一下试试,是不是错误没有了?
可是如果你认为这个文件对于编译的速度没有太大的提高,其实你完全可以不生成它;方法就是在刚刚建立一个项目的时候选择“空项目”,这样你就找不到 stdafx.h/.cpp 这两个文件了。如果你已经建立了一个项目并且不愿意重新再次建立一个项目,那么据我的推测(注意仅仅是推测,没有真正试过),你可以取消在主项目文件(.h/.cpp)里面注释掉“ #include “stdafx.h” ”这一行,我想应该是可以的。

[编译错误] fatal error C1083: 无法打开包含文件:“_*_stream.h”: No such file or directory

原文发表于 http://blog.csdn.net/StFairy/archive/2006/12/30/1469608.aspx

我在VS.NET里重编 圣II 源代码 时,就出现了“fatal error C1083: 无法打开包含文件:“fstream.h”: No such file or directory” 等等的类似的错误,其实解决方法是很简单的,只需要把“<fstream.h>”改为“<fstream>”即可。其实包括以前有人说“《圣II》源码编不通”,也大多是这个问题的。
在C中,所包含的文件通常以.h结尾,如<stdio.h>。在C++中,标准库头文件的后缀可以忽略不要<iostream>,这也是一个建议性的规范。《圣II》是在VC6下开发的,那时候VC还很不规范,有很多M$自己设计的东西,但现在就不一样了。C中常用的一些标准头文件在C++中仍然存在,不过文件名可能有所不同。例如,通过包含<cstdio>,可以访问<stdio.h>中的功能。

[编译错误] error LNK2001: 无法解析的外部符号

原文发表于 http://blog.csdn.net/StFairy/archive/2006/12/31/1470654.aspx

好多初学者在用DX SDK写自己的应用时,都莫名其妙的发现如下几个类似的编译(更准确地说是链接)错误:

FDraw.obj : error LNK2001: 无法解析的外部符号 _IID_IDirectDraw7
FDraw.obj : error LNK2019: 无法解析的外部符号 _DirectDrawCreate@12 ,该符号在函数 “int __cdecl DDInitialize(void)” (?DDInitialize@@YAHXZ) 中被引用
FInput.obj : error LNK2001: 无法解析的外部符号 _GUID_SysKeyboard
FInput.obj : error LNK2001: 无法解析的外部符号 _IID_IDirectInput8A
LIBCD.lib(wincrt0.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16 ,该符号在函数 _WinMainCRTStartup 中被引用
dinput8.lib(dilib1.obj) : error LNK2001: 无法解析的外部符号 _GUID_ZAxis
dinput8.lib(dilib1.obj) : error LNK2001: 无法解析的外部符号 _GUID_YAxis
dinput8.lib(dilib1.obj) : error LNK2001: 无法解析的外部符号 _GUID_XAxis
dinput8.lib(dilib2.obj) : error LNK2001: 无法解析的外部符号 _GUID_Key
Debug/sword.exe : fatal error LNK1120: 9 个无法解析的外部命令

而且这种问题是很奇怪的;不过其实并不很复杂。

首先,你大概知道,在使用DX SDK之前,应该在选项里面,把lib和include设置好,不过这并不代表你的代码在编译的时候会自动应用*.lib(比如说ddraw.lib),你需要在你的DX封装的cpp对应的header里加上类似的如下几句:

#pragma  once
#pragma  message("FDraw.h --> Linking with ddraw.lib")
#pragma  comment(lib,"ddraw.lib")

这几行文字就相当于告诉编译器编译的时候把 ddraw.lib 也编进去(链接, Link)。

试试看,加上相应的几句,是不是没有什么 error LNK2001 了?

《OpenGL基础图形编程》系列转载

这个系列的转载一直很受关注。原本打算时间充裕了可以重新自己写一个系列教程,但目前来看,拖了这么长时间还是没有功夫来好好做这件事。所以还是在这里把转载的原文放出来供大家下载吧。

点击这里下载OpenGL基础图形编程.zip(279KB;CHM压缩成ZIP)

Comments are closed.