 |
用户界面设计的技巧与技术
|
|
| |
| 对大多数人来说,用户界面就是软件本身。所以,掌握用户界面设计的技巧与技术是让软件走向市场的最直观因素。原文来源于http://www.ambysoft.com/userInterfaceDesign.pdf。
对于应用软件来说, 一个基本现实就是: 用户界面是面向用户的。用户需要的是开发者开发的应用软件满足其需求, 并且易于使用。太多的开发者自以为是艺术天才, 他们不去尽力遵循用户界面设计标准, 或花精力使得产品好用;
相反, 他们错误地认为编写更灵巧的代码或是使用一套确实有趣的颜色方案才是重要的事。Constantine(1995) 指出,好的用户界面使得人们不用阅读用户手册或接受培训就能使用应用软件。
界面设计的重要性有这么几个原因: 首先, 用户界面越直观, 就越易用, 越易用就越便宜。因为界面越好, 培训用户就越容易, 降低了培训成本; 界面越出色, 用户就越少求助, 降低了客户支持成本。其次, 界面越出色, 用户就喜欢使用, 增强了开发者工作的满意度。
一、用户界面设计的技巧与技术
本节所包含的用户界面设计技巧将有助于提高面向对象界面的设计。
1 、一致,一致,还是一致。你能做的最重要的事情就是保证用户界面运作的一致性。对于列表框来说,如果双击其中的项,使得某些事件发生,那么双击任何其它列表框中的项,都应该有同样的事件发生。所有窗口按钮的位置要 ...
|
|
| 作者:不祥 bluejoe张贴于2004-04-25 11:05:36.0,共阅读3231次,回复2次 |
|
|
 |
写一个函数,完成内存之间的拷贝。[考虑问题是否全面]
|
|
| |
| 答:void* mymemcpy( void *dest, const void *src, size_t count ){ char* pdest = static_cast<char*>( dest ); const char* psrc = static_cast<const char*>( src ); if( pdest>psrc && pdest<psrc+cout ) 能考虑到这种情况就行了 { for( size_t i=count-1; i!=-1; --i ) pdest = psrc; } else { for( size_t i=0; i<count; ++i ) pdest = psrc; } return dest;}int main( void ){ char str[] = "0123456789"; mymemcpy( str+1, str+0, 9 ); cout << str << endl; system( "Pause" ); return 0;}本文转载自IT网it求职笔试真题库网。
|
|
| 作者:不祥 oases2008张贴于2005-01-01 00:00:00.0,共阅读1336次,回复2次 |
|
|
 |
InstallShield教程
|
|
| |
| 上传了几次,每次10分钟还是上传不上不,也不晓得是什么原因,贴一个连接吧,ftp://vc:vc@218.197.202.143/,机子我每天都开着,连不连得上开个人的造化了,hoho
|
|
| 作者:不祥 Boyben张贴于2004-05-14 14:51:25.0,共阅读4160次,回复3次 |
|
|
 |
编写易于调试的VC代码
|
|
| |
| 一 程序的设计 要避免错误,首先要从好的设计开始。对于程序的设计,需考虑到程序的两个特性: 1简单性 大多数常见的错误来源于程序设计中不必要的复杂成分。一个好的设计应该反映问题本身的要求,而不必为了刻意追求“满足将来的需要”而添加不必要的特性。实际上,简单优雅的设计比那些复杂的设计更能迎合未来的需求。 2 耦合性 耦合(decoupling)性用来衡量不同对象之间的依赖程度。松耦合的程序易于理解和实现,易于测试和维护,且这种程序包含错误的可能性小,错误也较容易发现和清除。
二 编程风格 编程风格是个人问题,有很大的随意性。一个好的编程风格不仅让代码易理解,也易于调试。好的编程风格包括: 1 清晰地书写代码 如果没有必要,尽量不要使用语言中的高级特性,因为这些特性不易于理解和调试。使用大多数程序员都能理解的语言成分来书写代码不易犯错且易于理解和维护。 2 编写结构良好的代码 当程序崩溃时所能得到的最基本的调试信息是源代码文件、问题所在行的行号和一个调用栈(call stack)。调用栈是调试程序时最有帮助的部分,它提供错误出现的上下文,也就是带参数的函数调用序列。你书写的代码结构越好,调用栈就能给你越多信息。 3 使用良好的标识符 一个好名字能使你的代码更容易被理解和维护。流行的匈牙利命名法(Hungarian Notation) ...
|
|
| 作者:michael bluejoe张贴于2007-01-23 17:00:05.0,共阅读2408次,回复2次 |
|
|
 |
句柄大讨论(请各抒己见:)
|
|
| |
| 在Windows程序设计中,句柄是无法精确定义的术语。随便找一个高手,让他给你讲讲句柄是什么,恐怕他都很难给你一个具体的定义来。
在Windows程序设计中,句柄无所不在,窗口有窗口的句柄HWND,线程和进程也有句柄HANDLE,甚至有人把套接字也称为句柄(我就是这样的)。
句柄在英文中是handle,作为动词讲是处理的意思。简而言之,句柄是处理对象的一个接口,对于程序中所涉及的对象,你可以通过句柄去操作他。你不应该试图去回答句柄是什么,而应该从务虚的角度去理解他,知道他干什么即可。
有人说,因为handle的定义是void *,因此他是一个指针。有些熟悉内核的人说这是一个索引。这些说法都是不准确的。需要注意的是,微软并没有精确定义句柄的含义,也许在某个特殊的操作系统中,他使用了一种内部含义,但是在其他版本中,就不保证这样了。任何对句柄的内在假设都可能导致灾难性的后果。
API是接口,句柄是接口,两者有什么区别?API是一个通用的函数族,他处理所有的对象,而句柄是和某个具体对象相关联的数据结构。只有借助句柄,API才知道处理哪个对象。
有些对象有ID。句柄表示特殊的对象,ID也表示某个对象,为什么要两个东西来表示?
首先,句柄不能唯一表示对象。一个对象可以有多个句柄。例如:假设我们用CreateProcess创建一个进程,该进程的第一个线程的句柄会返回给 ...
|
|
| 作者:阿荣 kgj2008张贴于2007-05-14 10:15:40.0,共阅读1517次,回复3次 |
|
|
 |
角色扮演游戏引擎的设计原理
|
|
| |
| 角色扮演游戏引擎的设计原理
角色扮演游戏(RPG)是深受广大游戏迷们喜爱的一种游戏, 它以独特的互动性和故事性吸引了无数的玩家。它向人们提供了超出现实生活的广阔的虚拟世界,使人们能够尝试扮演不同的角色,去经历和体验各种不同的人生旅程或奇幻经历。这些体验都是在现实生活中无法实现的。在玩过许多游戏后,许多玩家都不再仅仅满足于一个游戏玩家的身份,而会思考游戏是如何制作的,并且打算制作一个自己的游戏,网上的各种游戏制作小组更是如雨后春笋般涌现。下面我就给大家介绍一下角色扮演游戏引擎的原理与制作,希望能对游戏制作爱好者有所帮助。
一 游戏引擎的原理
说到引擎,游戏迷们都很熟悉。游戏引擎是一个为运行某一类游戏的机器设计的能够被机器识别的代码(指令)集合。它象一个发动机,控制着游戏的运行。一个游戏作品可以分为游戏引擎和游戏资源两大部分。游戏资源包括图象,声音,动画等部分,列一个公式就是:游戏=引擎(程序代码)+资源(图象,声音,动画等)。游戏引擎则是按游戏设计的要求顺序的调用这些资源。
二 角色扮演游戏的制作
一个完整的角色扮演游戏的制作从大的分工来说可以分为:策划,程序设计,美工,音乐制作以及项目管理,后期的测试等。
策划主要任务是设计游戏的剧情,类型以及模式等,并分析游戏的复杂性有多大,内容有多少,策划的进度要多快等因素。
程序设计的任务是用某种编程 ...
|
|
| 作者:不祥 guifang张贴于2004-06-20 11:42:57.0,共阅读2326次,回复1次 |
|
|
 |
白乔原创:实战软件DIY[5]
|
|
| |
| 4. 实战体验
经过详细的实战部署和系统设计,后面就是真枪实弹的实战了。我们按照软件实现(编码)——帮助文档——安装程序——软件打包——软件测试的顺序一一介绍。
4.1 版本管理
且慢!还是不要急着编码,在进入具体的软件实现阶段,作为常识,你应该掌握一下关于版本管理的概念。
版本管理是软件配置管理(Software Configuration Management,简写为SCM)的一个重要环节。版本管理不属于软件开发过程中某个特定的阶段,而是贯穿于整个软件开发过程中的,在软件开发过程中所有的分析、设计文档和源代码都必须有严格的版本管理来保证。
版本管理的工具软件很多,在众多的成熟产品和试验产品中,笔者推荐目前使用比较广泛、有较大用户前景且又能较易获得的版本管理器产品Microsoft公司的Visual SourceSafe(VSS)。VSS是Microsoft Visual Studio产品家族的一员,图8示出了使用Visual SourceSafe对FlashNow!进行版本管理的实况。
图8 使用Visual SourceSafe进行FlashNow!版本管理
运用VSS进行版本控制管理的非常有效而且代价较小的解决方案是:
在一台Windows NT服务器或者是一台较为独立的Windows98/95 PC上安装VSS6.0的服务器端软件,创建一个 ...
|
|
| 作者:不祥 bluejoe张贴于2004-04-25 11:43:49.0,共阅读3867次,回复1次 |
|
|
 |
重读《Programmer》"C++之父"访谈
|
|
| |
| 一:C++ 的新标准
1998年通过了C++的标准。而新的标准将会再2005年出现。我想到了Whidbey的推迟发步,是否是和这个新的标准有关系。
二:C++与嵌入式软件
嵌入式软件的定义:凡是在非传统的计算机上运行的软件都是属于这个领域。而嵌入式软件开发对PL的根本的要求是:运行时效率,内存使用率,以及可以预测性。而C++可以设计成在资源有限的情形下支持以上的意图。
a. 可预测性
当调用一个virtual函数的时候,其开销是完全可以预测的。同时,在使用局部变量,静态全局域中的对象时,对象开销可以很好预测。
b.内存使用
如需要使用动态的内存,则可以使用内存池;甚至可以使用GC(当然是在没有时间限制的情形下)。
c. 运行效率
使用C++可以设计完全不涉及到OO的代码,同时和标准C的良好的兼容也是选择其的原因。
关于C++运行时的效率问题,可以参考:
http://arubis.dkuug.dk/jtc/sc22/wg21/docs/papers/2002/n1396.pdf
三:Managed C++
Herb Sutter 说 ISO 将会考虑采纳对M C++ 制定国际标准。
Dr. Stroustrup : 每个平台提供商都会对语言进行扩展,以便与平台与OS相兼容。而.NET的平台是和一般的C接口是不同。
四: ...
|
|
| 作者:beick iter张贴于2007-06-13 16:59:45.0,共阅读907次,回复0次 |
|
|
 |
C++语言风格流变史
|
|
| |
| 我确实没有见过哪一种语言能像C++这样,在代码风格方面表现得如此诡谲和难以捉摸:谁也说不清C++代码究竟能衍生出多少种迥异的风格,但我知道,有许多C++初学者在面对不同风格的C++代码时,经常会误以为自己看到的是好几种完全不同的编程语言??仅此一点就足以提醒我们,研究和廓清C++语言风格的演化和发展规律已是当务之急了。
程序代码也有风格,这算不得什么新鲜事。早在20世纪80年代, C语言程序员就必须在K&R风格和ANSI风格之间择善而从。但平心而论,我确实没有见过哪一种语言能像C++这样,在代码风格方面表现得如此诡谲和难以捉摸:谁也说不清C++代码究竟能衍生出多少种迥异的风格,但我知道,有许多C++初学者在面对不同风格的C++代码时,经常会误以为自己看到的是好几种完全不同的编程语言??仅此一点就足以提醒我们,研究和廓清C++语言风格的演化和发展规律已是当务之急了。
和文体学家们研究历朝历代文体变迁的工作相仿,研究C++语言风格的流变史也没有什么捷径可走。我们只能依据刘勰在《文心雕龙》中提倡的“原始以表末”[1]的研究方法,循着历史的脉络,推求代码风格的来源,探寻风格演化的内因,并借以阐明技术发展的趋势和规律。
1. 带类的C??对C语言风格的因袭
在1983年12月Bjarne Stroustrup采纳Rick Mascitti的建议,将其发明的新语言命名为“C++ ...
|
|
| 作者:王咏刚 iter张贴于2007-06-13 11:30:04.0,共阅读1172次,回复0次 |
|
|
 |
用DirectDraw编写动画程序
|
|
| |
| 一.理论篇 说起DirectDraw也许大多数人还不知其为何物,但一提到DirectX恐怕每一个Computer Fan 和Game Fan都再耳熟不过了。(什么!你没听说过DirectX!?Oh,My god!来人哪,拉下去重责五十大板!)DirectX又叫Game SDK,它最大的特点是直接对硬件的抽象层(HAL)进行操作,利用这个特点可以制作出高性能的Windows游戏。具体信息请见http://www. microsoft.com/directx/default.asp。 DirectDraw就是DirectX5的6个组件之一。DirectX5的其它5个组件分别是: Direct3D:提供了3D硬件接口。 DirectSound:立体声和3D声音效果,同时管理声卡的内存。 DirectPlay:支持开发多人网络游戏,并能处理游戏中网络之间的通信问题。 DirectInput:为大量的设备提供输入支持。 DirectSetup:自动安装DirectX驱动程序。 而DirectDraw则是DirectX的基石,DirectX的其它组件都是建立在它的基础之上的。DirectDraw使用页面切换的方法实现动画,它不仅可以访问系统内存,还可以访问显示内存,这是以往的Windows程序员所不能的。另外,我们利用DirectDraw还可以生成、移动、剪切、 ...
|
|
| 作者:不祥 jerry张贴于2004-06-11 09:48:45.0,共阅读2834次,回复1次 |
|
|
 |
!求助!朋友们请帮忙!!!
|
|
| |
| 最近在学习Visual C++界面编程!
不知道怎样将一段文字显示在EDIT类型的窗口界面上????
不知道调什么函数?还望大家指点!!
本人不尽感激!!
谢谢!!
方便的话清回复邮箱:Romid@163.com
或者直接回复该帖!!
谢谢!!
|
|
| 作者:A*C*C年 Romid张贴于2007-05-17 13:19:49.0,共阅读1110次,回复2次 |
|
|
 |
探察RUNTIME_CLASS的秘密
|
|
| |
| 学mfc学到文档,视图和框架的时候,知道必须在这三个类的派生类的类声明
里加上DECLARE_DYNCREATE,然后在类声明外合适的地方加上IMPLEMENT_DYNCREA
TE,然后文档,视图和框架,还有文档模板就可以协调工作了。查看msdn,发现
类似的宏有这几对:
DECLARE_DYNAMIC 和 IMPLEMENT_DYNAMIC
DECLARE_DYNCREATE 和 IMPLEMENT_DYNCREATE
DECLARE_SERIAL 和 IMPLEMENT_SERIAL
虽然msdn里介绍了他们的作用,但对于它们为什么会起这样的作用心里却没
底,于是翻了翻mfc的源代码,喜欢钻牛角尖的人可以和我一起来钻一钻。
1。
RUNTIME_CLASS宏的定义是这样的:
#define RUNTIME_CLASS(class_name)
((CRuntimeClass*)(&class_name::class##class_name))
其中##的意思是把##两边的符号都进行宏扩展(如果它们是宏的话),然后把扩展
后的内容连接在一起,中间不加空格。例如:RUNTIME_CLASS(CView)将被扩展成
:
(CRuntimeClass*)(&CView::classCView)
但这个classCV ...
|
|
| 作者:chiefman kgj2008张贴于2007-05-14 21:19:42.0,共阅读1288次,回复0次 |
|
|
 |
白乔原创:艺术编程之C++篇[3]
|
|
| |
| 2 编写稳的代码——代码的鲁棒性
“没有最稳,只有更稳”,几乎没有一个程序是完全稳定的,简单的HelloWorld在内存吃紧的时候也可能会束手无策。但,我们的目的是让程序更稳定一点……
2.1 小心掉下去——错误陷阱
一切从小事开始,在C++语言里,存在着很多危险的错误陷阱,就像《雷电II》里面的漩涡,一不小心就会掉进去——只有学会正确地避免它们,才能将程序的危险性降低到最低限度。
以下内容介绍常见的错误陷阱:
2.1.1 奇怪的表达式(expression)
嗯,看一看下面的表达式:
int i = 100;
i += i = 10 + ++i + i + i++;
这是完全合法的一例表达式,知道该死的i会有什么样的值? 这是常见的面试题中的一种,许多老师和招聘单位总会拿出这样的表达式来整人并藉以炫耀,常常让人想到孔乙己:“你知道茴字有几种写法?”
写出这样的表达式是不负责任的,不同的编译器很有可能会得出不同的结果。不缺德的程序员应该避免这样的写法。否则,会有想象不到的灾难来临。
使用表达式时最好遵循以下规则:
不要过分地依赖于各操作符的优先权,在必要的时候使用括号()。如:
bool bValue = (i > j) && (i < 0 || j < 0);
不要过分地依赖于表达式的赋值顺序,如尽量少用++i,++j等。
if语句谨防“= ...
|
|
| 作者:不祥 bluejoe张贴于2004-04-10 11:55:09.0,共阅读3729次,回复2次 |
|
|
 |
解读VC++编程中的文件操作API和CFile类
|
|
| |
| 在VC编程中,操作文件的方法主要有两种:利用API函数和MFC的CFile类。微软在其中封装了文件的一般操作,下面我就介绍一下如何利用这两种方法实现文件操作。
1.创建或打开一个文件
API函数CreateFile可打开和创建文件、管道、邮槽、通信服务、设备以及控制台,但是在此时只是介绍用这个函数怎么实现创建和打开一个文件。
HANDLE CreateFile(
LPCTSTR lpFileName, // 要打开的文件名
DWORD dwDesiredAccess, // 文件的操作属性
DWORD dwShareMode, // 文件共享属性
LPSECURITY_ATTRIBUTES lpSecurityAttributes,// 文件安全特性
DWORD dwCreationDisposition, //文件操作
DWORD dwFlagsAndAttributes, // 文件属性
HANDLE hTemplateFile // 如果不为零,则指定一个文件句柄。新文件将从这个文件中复制扩展属性
);
文件的操作属性:如果为零,表示只允许获取与一个设备有关的信息,GENERIC_READ 表示允许对设备进行读访问;如果为 GENERIC_WRITE 表示允许对设备进行写访问(可组合使用);
文件的共享属性:零表示不共享; ...
|
|
| 作者:不祥 iter张贴于2007-03-13 14:32:17.0,共阅读4415次,回复0次 |
|
|
 |
java关于23种设计模式的有趣见解
|
|
| |
| java里23种设计模式,对VC设计来说应该一样通用。与大家共享之:
创建型模式
1、FACTORY
追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory
工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。
2、BUILDER
MM最爱听的就是“我爱你”这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键,见到MM我只要按对应的键,它就能够用相应的语言说出“我爱你”这句话了,国外的MM也可以轻松搞掂,这就是我的“我爱你”builder。(这一定比美军在伊拉克用的翻译机好卖)
建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。
3、FACTORY METHOD
请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我一般采用Fact ...
|
|
| 作者:不祥 bluejoe张贴于2007-01-31 16:14:05.0,共阅读1370次,回复0次 |
|
|
 |
用Visual C++在局域网实现IP多播
|
|
| |
| 在局域网中,管理员常常需要将某条信息发送给一组用户。如果使用一对一的发送方法,虽然是可行的,但是过于麻烦,也常会出现漏发、错发。为了更有效的解决这种组通信问题,出现了一种多播技术(也常称为组播通信),它是基于IP层的通信技术。为了帮助读者理解,下面将简要的介绍一下多播的概念。众所周知,普通IP通信是在一个发送者和一个接收者之间进行的,我们常把它称为点对点的通信,但对于有些应用,这种点对点的通信模式不能有效地满足实际应用的需求。例如:一个数字电话会议系统由多个会场组成,当在其中一个会场的参会人发言时,要求其它会场都能即时的得到此发言的内容,这是一个典型的一对多的通信应用,通常把这种一对多的通信称为多播通信。采用多播通信技术,不仅可以实现一个发送者和多个接收者之间进行通信的功能,而且可以有效减轻网络通信的负担,避免资源的无谓浪费。
广播也是一种实现一对多数据通信的模式,但广播与多播在实现方式上有所不同。广播是将数据从一个工作站发出,局域网内的其他所有工作站都能收到它。这一特征适用于无连接协议,因为LAN上的所有机器都可获得并处理广播消息。使用广播消息的不利之处是每台机器都必须对该消息进行处理。多播通信则不同,数据从一个工作站发出后,如果在其它LAN上的机器上面运行的进程表示对这些数据"有兴趣",多播数据才会制给它们。
本实例由Sender和Receiver两个程序组成,Sender ...
|
|
| 作者:不祥 bluejoe张贴于2007-01-17 13:29:46.0,共阅读2457次,回复1次 |
|
|
 |
Visual C++实现Flash动画播放方案
|
|
| |
| 摘要
本文通过在VC中将外部swf格式文件内嵌为VC的内部资源,使其在程序运行过程中从资源动态释放到临时文件,从而实现VC对Flash动画的播放。
引言
Flash动画由于可以很方便地把用户的想象通过动画显现出来,使原本只属于专业制作人员的动画制作变的异乎寻常的快捷、方便。由于Flash制作的动画在层次、内容、表现形式等诸多方面均比较出色,因此在网络上得到迅猛的发展,更有不少厂商用Flash在互联网上做起了广告和产品演示,效果丝毫不比视频的差,而体积则要小的多。Flash不仅在网络上有广泛的应用,在普通的应用程序中也可以借助Flash实现一些VC、Delphi等编程语言所难以实现的特效,比如在一些演示版的程序中完全可以将程序运行前的闪屏用Flash来制作。本文下面将通过对内嵌资源的动态释放来实现VC对Flash动画的播放,并给出了部分实现代码。
内嵌资源的动态释放
Flash动画在此是作为程序的一个模块,虽然也可以以文件的形式作为一个外部资源来使用,但为了避免因外部模块遗失而造成程序的非正常运行,可将由Flash 5.0预先制作好的swf格式的文件以资源的形式打包到应用程序中去,而在程序运行时再将其从资源恢复到文件,使用完毕再通过程序将其从磁盘删除。 在导入资源时由于swf格式文件并非VC的标准资源,所以在导入时需要在"Resource type"栏指定资源类型"SW ...
|
|
| 作者:郎锐 bluejoe张贴于2007-01-23 10:15:49.0,共阅读2145次,回复0次 |
|
|
 |
[招聘]网游C++程序员,工作地点成都
|
|
| |
| 招聘全职C++程序员进行网游相关辅助工具开发。希望06年12月可以立即展开工作。
熟悉C++语言,熟悉数据结构与算法,计算机基础知识
能熟练使用vc进行win32程序开发,对STL比较了解。
对软件开发工作有激情,有创造力,有合作精神,有一定的学习能力和理解能力
能够遵守、尊重公司、团队的研发制度和规范
工作地点成都市市区。
有意者加 MSN : happysky2047@hotmail.com
|
|
| 作者:不祥 qwerddf张贴于2006-11-30 11:11:39.0,共阅读1867次,回复0次 |
|
|
 |
VC++的链接错误LNK2001
|
|
| |
| 学习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时,编译都已通过。产生连接错误的原因非常多,尤其LNK2001错误,常常使人不明其所以然。如果不深入地学习和理解VC++,要想改正连接错误LNK2001非常困难。
初学者在学习VC++的过程中,遇到的LNK2001错误的错误消息主要为:
unresolved external symbol “symbol”(不确定的外部“符号”)。
如果连接程序不能在所有的库和目标文件内找到所引用的函数、变量或标签,将产生此错误消息。一般来说,发生错误的原因有两个:一是所引用的函数、变量不存在、拼写不正确或者使用错误;其次可能使用了不同版本的连接库。
以下是可能产生LNK2001错误的原因:
一.由于编码错误导致的LNK2001。
1.不相匹配的程序代码或模块定义(.DEF)文件能导致LNK2001。例如, 如果在C++源文件内声明了一变量“var1”,却试图在另一文件内以变量“VAR1”访问该变量,将发生该错误。
2.如果使用的内联函数是在.CPP文件内定义的,而不是在头文件内定义将导致LNK2001错误。
3.调用函数时如果所用的参数类型同函数声明时的类型不符将会产生LNK2001。
4.试图从基类的构造函数或析构函数中调用 ...
|
|
| 作者:不祥 Boyben张贴于2004-05-13 14:00:04.0,共阅读7338次,回复1次 |
|
|
 |
VC基础学习:初学者指针指南
|
|
| |
| 何为指针?
指针基本上和其它的变量一样,唯一的一点不同就是指针并不包含实际的数据,而是包含了一个指向内存位置的地址,你可以在这个地址找到某些信息。这是一个很重要的概念,并且许多程序或者思想都是将指针作为它们的设计基础,例如链表。
开始
如何定义一个指针?呃,就像定义其它的变量一样,不过你还需要在变量名之前添加一个星号。例如,下面的代码创建了两个指向整数的指针:
int* pNumberOne;
int* pNumberTwo;
注意到变量名的前缀“p”了吗?这是编写代码的一个习惯,用来表示这个变量是一个指针。
现在,让我们把这些指针指向一些实际的值吧:
pNumberOne = &some_number;
pNumberTwo = &some_other_number;
“&”标志应该读作“the address of(……的地址)”,它的作用是返回一个变量的内存地址,而不是这个变量本身。那么在这个例子中,pNumberOne就是some_number的地址,亦称作pNumberOne指向some_number。
现在,如果我们想使用some_number的地址的话,那么我们就可以使用pNumberOne了。如果我们希望经由pNumberOne而使用some_number的值的话,我们可以用*pNum ...
|
|
| 作者:不祥 try_yuyi张贴于2004-07-24 19:09:16.0,共阅读5000次,回复5次 |
|
|