Java堂  


Visual C++ 6.0中error LNK2001和error C2065问题的解决方法

归档在: C++Plateform — Jet @ 3:43 上午
原文出处: http://www.javatang.com/archives/2007/11/01/4346235.html
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

1. error C2065错误:错误描述类似于下面的文字:

error C2065: ‘timeGetTime’ : undeclared identifier

这是因为没有包含头文件而导致编译器找不到所使用的函数,只要查阅MSDN将对应的头文件include进去就可以了。

  1. #include <mmsystem.h>

2. LNK2001错误:错误描述类似于下面:

error LNK2001: unresolved external symbol_…

这是因为没有链接对应的lib文件造成的,在#include语句之前加入#pragma语句,比如:

  1. #pragma comment(lib, "Ws2_32.lib")

总之需要根据MSDN中的“Requirements”所要求的header和lib使用上述方法添加到程序头文件中即可。

参考资料:
郁闷的error LNK2001: unresolved external symbol,请大家帮忙..
error LNK2001: unresolved external symbol _main解决办法
MFC开发求助

C++基础之字符串处理函数

归档在: C++Plateform — Jet @ 10:20 上午
Tags:
原文出处: http://www.javatang.com/archives/2007/10/30/2016233.html
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

Strlen()用来计算字符串的长度,其中并不包含结束字符。此函数会计算字符串的字节长,不把结束字符算在内。

Strcpy()是将一个字符串复制到另一个字符串。若要将字符串s2复制到字符串s1中,则s1必须要有足够的空间来容纳s2,最后此函数返回s1的起始地址。

Strcat()是将两个字符串合并成一个字符串。若要将字符串s2连接到字符串s1的后面,则必须将s1的结束字符去掉,且字符串s1要有足够的空间来容纳字符串s2,最后此函数返回s1的起始地址。

CString.Format 用于格式化数字从而将其转换为CString类型,示例代码如下:

  1. CString str;  
  2. int num = 20;  
  3. str.Format("%d",   num);

参考资料:将数字转换为字符串用哪个函数.

运行MFC程序提示没有找到MFC42D.DLL文件的解决方法

归档在: C++Plateform — Jet @ 10:10 下午
Tags: ,
原文出处: http://www.javatang.com/archives/2007/04/17/1014160.html
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

出现上述提示的原因是默认情况下MFC程序是使用的动态联编方式,这种情况下在对方机器中没有安装VC++程序的情况下就会出现这个错误提示。解决的方法很简单,就是编译的时候采用静态联编的方式,也就是说将用到的dll文件编译到程序中。

具体操作方法:Project -> Settings… 在General标签下面的Microsoft Foundation Class下面选择Use MFC in a Static Library即可。

参考资料:
http://topic.csdn.net/t/20040826/17/3312846.html

VS2005按照过程中总是提示插入光盘的解决方法

归档在: C++Plateform, Tools — Jet @ 12:52 下午
原文出处: http://www.javatang.com/archives/2007/04/15/5216159.html
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

我下载的是VS2005英文专业版CD版本的,有两张CD。以前的时候通过虚拟光驱加载成功安装过一次,后来就刻成光盘了。昨晚刚重装系统,但是用两个光盘安装VS2005的时候在中途总是出现下面的提示:

Please insert the disk: Microsoft Visual Studio 2005 Professional Edition - ENU Disk 1

可是我明明放在光驱的就是CD1啊,后来换成CD2还是有这个提示,极度郁闷。弄了几次总是无法解决,于是决定再下载一个DVD版本的。无意中在VeryCD的论坛上的一个帖子上看到这样一句话:

注意:
安装visul studio 2005时遇到Please insert the disk: Visual Studio 2005 DVD提示, 解决方法:用ultraISO将iso“文件”—“属性—“标签”,将标签该为“DVD1”不含双引号。,然后文件vol改成DVD1(记住,先将iso文件从虚拟光驱上退下,但安装程序不要关闭)

虽然上面的是说的DVD版本的问题,但是CD是不是也是这样的问题呢?果然是在刻录光盘之前我将ISO文件的标签修改了。于是把两个光盘做成ISO镜像,然后将标签修改成与卷集相同的名称。CD1是VSPROD1,CD2是VSPROD2。保存重新用虚拟光驱加载安装,顺利通过!

原来微软的VS安装程序是通过光盘的标签来确定的,呵呵。

Eclipse3.2.1中使用CDT经常CPU100%问题的解决方法

归档在: C++Plateform, Tools — Jet @ 1:20 下午
Tags: ,
原文出处: http://www.javatang.com/archives/2007/01/28/202192.html
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

昨天发现在使用CDT的时候发现Indexer经常进行Index操作,从而造成电脑速度缓慢,CPU100%。后来从网上搜索了一下,发现是CDT同JDK1.6以下版本不是很兼容,如果将JDK更新为1.6或者使用IBM的JVM就没有这个问题了。但是服务器上的jre是1.5,所以程序都是基于JDK1.5编写的。这样的话只要单独给Eclipse指定一个jre就可以了。具体就是在Eclipse的快捷方式后面加上

-vm “your jre’s path”

后面是jre的路径。有两种解决的方法:

1. 下载最新的jre1.6,先安装,然后将jre安装目录复制到其他地方,比如C:\jre1.6.0,然后再卸载刚才安装的jre1.6,最后指定eclipse -vm 后面的路径。因为安装再卸载jre1.6的原因是防止覆盖电脑中原有的JDK1.5(其实也没有大碍,但是留着总感觉不舒服),我是直接在VMware中安装再删除的,呵呵。如果你不愿这么麻烦可以直接下载我打包好的jre1.6

2. 在IBM Developerworks上下载Eclipse Development Package,然后将包中的jre目录复制出来,比如C:\ibm_jre50,然后再指定eclipse -vm 后面的路径就可以了。在IBM上下载需要注册一个IBM的帐号,或者直接下载我打包好的ibmjre

参考资料:
Eclipse CDT开发C++速度慢的解决方法
CDT Indexer导致CPU 100%的解决办法

Eclipse中安装设置CDT

归档在: C++Plateform, Tools — Jet @ 11:42 下午
Tags: ,
原文出处: http://www.javatang.com/archives/2007/01/27/420290.html
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

最近在看C++ Primer有些例子需要实际调试一下,因为一直使用Eclipse自然而然就选择了CDT。今天终于安装设置成功了,现在总结一下。

1) 首先安装GCC,在Windows下面有两种实现:MinGW和Cygwin,因为MinGW是原生的win32移植,不需要另外的POSIX模拟中间层的支持,所以选择MinGW。

2) 在MinGW官方下载页面(http://www.mingw.org/download.shtml)下载MinGW-5.0.0.exe,这是一个在线安装MinGW的安装程序。

3) 运行MinGW-5.0.0.exe,选择MinGW base tools(C编译器),g++编译器,和MinGW Make三个包进行下载。其实安装文件是下载了下面几个文件包:

mingw-runtime-3.9.tar.gz
w32api-3.6.tar.gz
binutils-2.15.91-20040904-1.tar.gz
gcc-core-3.4.2-20040916-1.tar.gz
gcc-g++-3.4.2-20040916-1.tar.gz
mingw32-make-3.80.0-3.tar.gz

如果通过安装程序下载速度很慢的话(一般是不快,呵呵),也可以单独在下载页面中的Current下面单独下载上述文件。

4) 将3中下载下来的所有包拷贝到同一个目录下面,比如C:\MinGW,然后解压缩到当前目录。这里可以使用WinRAR,如果遇到提示相同文件是否覆盖的时候直接选择“是”就可以了。

5) 设置下面的环境变量:

CPLUS_INCLUDE_PATH
C:\MinGW\include\c++\3.4.2;C:\MinGW\include\c++\3.4.2\mingw32;C:\MinGW\include\c++\3.4.2\backward;C:\MinGW\include

C_INCLUDE_PATH
C:\MinGW\include

LIBRARY_PATH
C:\MinGW\lib

Path
C:\MinGW\bin;%path%

6) 最后安装CDT到Eclipse中。之前Eclipse一直都是使用的3.1.1,因为现在官方没有找到对这个版本支持的CDT了,所以就升级到了最新的3.2.1。下载CDT安装到Eclipse,这一步很简单,这里就不多罗嗦了。

7) 创建”standard Make C++ Project”,然后分别创建C++源文件以及makefile,这一步可以参考GCC的帮助文件。这里需要说明的一句是,如果编译win32下的程序的话,需要在window->preference->c/c++->make->new make project的binary parser选项卡中改PE windows parse为默认项,否则程序构建时会报错。

最后总结几点比较重要的地方:
1. 如果构建程序的时候出现:“Error launching builder (make -k p19 ) (Exec error:Launching failed) ”错误提示,这是因为找不到默认的make.exe文件,只要将MinGW的bin目录下面的mingw32-make.exe复制一份然后修改为make.exe就可以了。

2. 如果不想在系统中设置上面的那么多环境变量的话,也可以在Eclipse中设置,位置在window->preference->c/c++->make->new make project中的Enviroment选项卡中。这里建议系统中将bin目录放到path中,这样可以直接在命令行下面进行编译。另外说明一点的是如果系统和Eclipse中都不设置CPLUS_INCLUDE_PATH、C_INCLUDE_PATH和LIBRARY_PATH的话,编译程序之后生产的exe文件不能自动被系统认为二进制文件,这样就不能在Eclipse中的Console中执行程序了。

3. 程序构建的时候如果出现“warning: no newline at end of file”警告的话可以在代码的最后打一个回车,具体原因不是很清楚。

参考资料:
How to:安装GCC的Windows版本
gcc for windows 环境搭建
windows系统下利用mingw ,eclipse下c/c++开发环境的配置
补充cdt的安装

从Java到C++

归档在: C++Plateform, JavaPlateform — Jet @ 11:45 下午
Tags: ,
原文出处: http://www.javatang.com/archives/2007/01/04/450487.html
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

从Java到C++,今天看到了一篇文章感觉很是经典。其中最能总结的一句话就是:关键是把C++当作Java的sister,无关C事。我不喜欢直接把别人的文章拷贝过来,所以给一下文章的地址。 :)

Javaer 双修C++的key point

在Visual Studio2005中编译标准C++程序

归档在: C++Plateform — Jet @ 11:16 下午
原文出处: http://www.javatang.com/archives/2006/08/16/165356.html
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

最新的Visual Studio 2005中加入了对C++标准,并且编写代码的时候更加方便,更加人性话。但是最近在VS2005中用标准 C++ 写了一个小程序,编译之后在没有安装 .net 的机器上运行,会出现“应用程序没准备好”的错误。

后来查了一下网上的资料,找到如下的解决方法:

项目属性 -> C/C++ -> 代码生成 -> 运行时库, 此处改为“多线程 (/MT)”,默认的选项为“多线程 DLL (/MD)”。

出现错误的原因是默认的选项为“多线程 DLL(/MD)”,这样在VS2005编译的时候要装载 Visual C++ 2005 Redistributable 的。

参考资料:
[讨论]用VS2005生成本地C++代码的问题
http://community.csdn.net/Expert/topic/4841/4841888.xml?temp=.7529566