随笔分类 -  VS

摘要:友元函数和友元类采用类的机制后实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,成员函数一般定义为公有的,依此提供类与外界间的通信接口。但是,有时需要定义一些函数,这些函数不是类的一部分,但又需要频繁地访问类的数据成员,这时可以将这些函数定义为该函数的友元函数。除了友元函数外,还有友元类,两者统称为友元。友元的作用是提高了程序的运行效率(即减少了类型检查和安全性检查等都需要时间开销),但它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。友元函数:友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在 阅读全文

posted @ 2012-04-29 21:02 无忧consume 阅读(219) 评论(0) 推荐(1) |

摘要:在VS2008 VC++项目中,新建了一个cpp文件,然后在物理硬盘上手动删除了,或是手动移动了地址,就出现如下错误。1>------ Build started: Project: test, Configuration: Debug Win32 ------1>Compiling...1>random.cpp1>c1xx : fatal error C1083: Cannot open source file: '.\XX.cpp': No such file or directory解决方法是:到项目文件test.vcproj 中找到下面一段代码, 阅读全文

posted @ 2012-04-28 23:12 无忧consume 阅读(581) 评论(0) 推荐(0) |

摘要:VS2008 一个不产生窗口的Win32程序,代码如下:[cpp]#include <windows.h>int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow){ return 0;}[/cpp]编译后产生如下错误:1>MSVCRTD.lib(crtexew.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用1>E:\work\Wind 阅读全文

posted @ 2012-04-28 11:05 无忧consume 阅读(2812) 评论(0) 推荐(0) |

摘要:#include <iostream>using namespace std;struct vertex{ int x; int y; int z; // Input and Output friend std::ostream& operator<<(std::ostream& os, const vertex& vo); };std::ostream&operator<<(std::ostream& os, const vertex& vo){ return os << "<&q 阅读全文

posted @ 2012-04-27 22:54 无忧consume 阅读(220) 评论(0) 推荐(0) |

摘要:C/C++程序编译步骤 如何生成可执行文件*******************************************************篇一******************************************************************************************** 电子计算机所使用的是由“0”和“1”组成的二进制数,二进制是计算机的语言的基础。计算机发明之初,人们只能降贵纡尊,用计算机的语言去命令计算机干这干那,一句话,就是写出一串串由“0”和“1”组成的指令序列交由计算机执行,这种语言,就是机器语言。想象一下老前辈们 阅读全文

posted @ 2012-04-27 14:13 无忧consume 阅读(438) 评论(0) 推荐(0) |

摘要:编译单元 当一个c或cpp文件在编译时,预处理器首先递归包含头文件,形成一个含有所有 必要信息的单个源文件,这个源文件就是一个编译单元。这个编译单元会被编译成为一个与cpp 文件名同名的目标文件(.o或是.obj) 。连接程序把不同编译单元中产生的符号联系起来,构成一个可执行程序。 阅读全文

posted @ 2012-04-27 13:53 无忧consume 阅读(204) 评论(0) 推荐(0) |

该文被密码保护。

posted @ 2012-03-25 14:52 无忧consume 阅读(1) 评论(0) 推荐(0) |

摘要:在用VS2005或VS2008的VC++开发产品时,经常遇到的一个问题就是最终编译出的可执行文件Exe、Dll、Ocx之类会需要MSVCR90.dll、MSVCR80.dll等C库函数运行时Dll的支持,在一些较老的系统,如XP 中,经常不具备这些新版本的运行库,导致产品发布推广成为一个严重的问题。在2008年我还在开发一款网游时,也遇到了同样的问题,虽然想尽了办法,也无法屏蔽对这个动态库的引用,不得已,客户端就又返回老的VS2003环境中进行编译开发,最终发布。 可以使用VS2008自带的安装程序制作工具,生成一个最简的VC++ Redistributable 包,体积也很小,但是一样... 阅读全文

posted @ 2012-03-20 20:21 无忧consume 阅读(373) 评论(0) 推荐(0) |

摘要:第一步,先运行这个软件(就是生成的EXE),把他的各个功能都试一下;第二步,将代码按各个功能模块分组(自己在工程中建目录管理);第三步,按功能模块单个阅读代码(同时自己增加注释);第四步,调试运行各个功能模块(同时自己增加注释)。 利器:调试 阅读全文

posted @ 2012-03-19 16:08 无忧consume 阅读(178) 评论(0) 推荐(0) |

摘要:一般stl中要是不是普通数据类型,用指针更优效一点。为了防止偷偷的拷贝构造函数 阅读全文

posted @ 2012-03-16 19:57 无忧consume 阅读(156) 评论(0) 推荐(0) |

摘要:http://www.cnblogs.com/cxun/archive/2007/05/05/736208.html一、生成DLL1.新建DLL工程生成DLL可以多种方法,这里介绍一种。在VS中,新建一个空的项目,选Win32 Console Application,新建完后修改工程属性:把生成EXE改为生成DLL2.源代码:#include <iostream>#include <windows.h>using namespace std;#ifdef __cplusplus// if used by C++ codeextern "C" {// 阅读全文

posted @ 2012-03-15 12:10 无忧consume 阅读(381) 评论(0) 推荐(0) |

摘要:#include <stdio.h>#include <stdlib.h>#include <string.h> void main() { char filename[16] = "MHT"; char *type = ".txt"; char str[4]; int i = 10; itoa(i, str, 10); printf("%s %d\n", filename, sizeof(filename)); //sizeof 全部长度 printf("%s %d\n", f 阅读全文

posted @ 2012-03-14 23:44 无忧consume 阅读(185) 评论(0) 推荐(0) |

摘要:#include <string.h>#include <stdio.h>int main(){ char a[30] = "string (a)"; char b[30] = "hi\0zengxiaolong"; int i;strcpy(a, b); //a[30] = "hi\0ing (a)" printf("strcpy():"); for(i = 0; i < 30; i++) printf("%c", a[i]); //hiing (a)memcpy 阅读全文

posted @ 2012-03-14 22:04 无忧consume 阅读(196) 评论(0) 推荐(0) |

摘要:http://blog.pfan.cn/cracker007/17239.html初学者经常被这个问题所困惑: char *p="abc"==>"abc"是一个const char*,为什么能够赋值给char *? 按照 C/C++ 标准的描述,"abc" 是 string literal (字符字面量、字符文字量),具有静态存储性质,类型是数组类型,并且不能被改变。注意:"abc" 是一个数组类型的对象,是左值。当然左值可以转化为右值使用,就像数组类型的对象可以转化为指针一样。虽然 "abc&qu 阅读全文

posted @ 2012-03-13 13:42 无忧consume 阅读(351) 评论(0) 推荐(0) |

该文被密码保护。

posted @ 2012-03-13 11:43 无忧consume 阅读(1) 评论(0) 推荐(0) |

摘要:C++中令人混淆的3个new和delete在深入学习C++的过程中遇到3个new和delete让我十分迷惑,经过学习,有了点初步理解的感觉。总结如下C++中,内存分配和对象构造紧密纠缠,就像对象析构和内存回收一样。使用new 表达式的时候,分配内存,并在该内存中构造一个对象,使用delete的时候,调用析构函数撤销对象,并将对象所用内存返还给系统。C++提供了一下两种方法来分配和释放未构造的原始内存:1)allocator类的allocate 和 deallocate成员函数2)标准库中的 operator new 和 operator delete。C++还提供了在原始未构造的内存中构造和析 阅读全文

posted @ 2012-03-13 10:32 无忧consume 阅读(251) 评论(0) 推荐(0) |

摘要:线程是有趣的http://www.ibm.com/developerworks/cn/linux/thread/posix_thread1/了解如何正确运用线程是每一个优秀程序员必备的素质。线程类似于进程。如同进程,线程由内核按时间分片进行管理。在单处理器系统中,内核使用时间分片来模拟线程的并发执行,这种方式和进程的相同。而在多处理器系统中,如同多个进程,线程实际上一样可以并发执行。那么为什么对于大多数合作性任务,多线程比多个独立的进程更优越呢?这是因为,线程共享相同的内存空间。不同的线程可以存取内存中的同一个变量。所以,程序中的所有线程都可以读或写声明过的全局变量。如果曾用 fork() 编 阅读全文

posted @ 2012-03-12 14:49 无忧consume 阅读(221) 评论(0) 推荐(0) |

摘要:大多数情况下都是vc安装的问题试试下面的方法吧:(转的)Compiling...Error spawning cl.exe3-6.exe - 1 error(s), 0 warning(s)可能很多人在安装VC 6.0后有过点击“Compile”或者“Build”后被出现的“Compiling... ,Error spawning cl.exe”错误提示给郁闷过。很多人的选择是重装,实际上这个问题很多情况下是由于路径设置的问题引起的,“CL.exe”是VC使用真正的编译器(编译程序),其路径在“VC根目录\VC98\Bin”下面,你可以到相应的路径下找到这个应用程序。因此问题可以按照以下方法解 阅读全文

posted @ 2012-03-11 23:27 无忧consume 阅读(357) 评论(0) 推荐(0) |

摘要:如果回调函数是普通成员函数会出现错误: error C2440: 'type cast' : cannot convert from '' to 'unsigned long (__stdcall *)(void *)' 必须声明为静态成员函数。将成员函数声明为静态虽然可以解决作为线程函数的问题,但是它带来了新的问题,那就是static成员函数只能访问static成员。解决此问题的一种途径是可以在调用类静态成员函数(线程函数)时将this指针作为参数传入,并在改线程函数中用强制类型转换将this转换成指向该类的指针,通过该指针访问非静态成员。 线 阅读全文

posted @ 2012-03-04 02:00 无忧consume 阅读(1409) 评论(0) 推荐(0) |

摘要:错误为:error C2664: 'CreateThread' : cannot convert parameter 3 from 'void (int)' to 'unsigned long (__stdcall *)(void *)'代码如下:void CMultiThread2Dlg::OnStart(){UpdateData(TRUE);int integer=m_nCount;hThread=CreateThread(NULL,0,ThreadFunc,(VOID*)integer,0,&ThreadID);GetDlgItem 阅读全文

posted @ 2012-03-04 01:56 无忧consume 阅读(1561) 评论(0) 推荐(0) |

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3