VC2010中初学者常见错误、警告和问题
Microsoft_Visual_Studio_2010安装使用
Visual studio2010安装使用下载地址:/zh-cn/vstudio/default.aspx这个是Visual Studio 2010中文旗舰版的启动画面。
下一章中,我将教大家安装、配置VS2010/VC2010,以及如何使用它来创建第一个C++程序。
如果你没有下载过Visual Studio 2010的话,那么请你提前下载好它吧:第二章安装、配置和首次使用VS2010本章将帮助大家安装Visual C++ 2010,帮助大家做一些常见的配置,以及第一次使用它来写HelloWord程序。
安装Visual C++ 2010是属于Visual Studio 2010的一部分,这个在前一章中已经讲解过,实际上Visual C++ 2010也有更多的子版本,正如Windows7有旗舰版、家庭高级版、家庭初级版一样。
在上一章的下载地址中有两个版本可以选择,我选择的时候旗舰版,这个功能最全面。
如果你下载完毕了,应该有一个ISO镜像文件,如果你是从我给的地址下载的,那么那个序列号已经被替换成正版序列号,直接安装即可。
下面是ISO文件截图:这就是光盘镜像文件,我们有多种方式可以安装它,你可以把它烧录成光盘,也可以用虚拟光驱软件安装它,由于这个ISO已经被修改过了,你甚至可以直接解压它,然后运行里面的setup.exe进行安装。
这里我使用虚拟光驱进行说明,首先我假设你已经安装好了虚拟光驱软件DAEMON Tools Lite,如果你还没有安装,请去游侠补丁网下载,因为在那里你总是能找到最新的免费版本。
接下来我们通过虚拟光驱加载刚才下载好的ISO镜像:在弹出的对话框中选择我们下载好的ISO文件。
这个时候,虚拟光驱里面已经替我们打开了ISO文件,有的机器可能会自动弹出安装提示,有的不会。
如果自动弹出安装提示,那么直接通过即可,如果没有弹出,那么用资源管理器方式进入虚拟光驱点击Setup.exe 即可开始安装。
Visual_C++_2010安装使用教程
《Visual C++ 2010入门教程》第一章: 关于Visual Studio、VC和C++的那些事首先,这三个东西有什么区别呢?VC和C++是相同的吗,有什么区别呢?我刚开始学C++的时候也有这样的问题,在这里我来替大家解释一下他们到底是什么。
Visual Studio,我们一般都简称为VS,VC全称是Visual C++,C++就不用解释了吧?Visual Studio其实是微软开发的一套工具集,它由各种各样的工具组成,这就好像Office 2007是由Word 2007、Excel 2007、Access 2007等等组成的一个道理。
其中Visual C++就是Visual Studio的一个重要的组成部分。
Visual Studio可以用于生成Web应用程序,也可以生成桌面应用程序,在Visual Studio下面,除了VC,还有Visual C#,Visual Basic,过去还有Visual J#,现在还有Visual F#等等组件工具,使用这些工具你可以使用C++语言、C#语言或者Basic语言(微软改进版)进行开发。
这就好比桌上放着刀、叉、筷子,你可以用它们来吃饭,无论你用什么工具都可以,因为它们都是餐具的一种。
VC,全称是Visual C++,它只是一个工具而已。
C++是一门和C、Basic、C#、Java一个概念的东西,它是一门语言,这个概念就同汉语、英语、法语之间的关系一样。
语言的可以不同,他们有的复杂有的精简,比如汉语,我个人认为这是这个星球上最复杂的语言;又比如电影《阿凡达》中外星人使用的语言,不过100都个单词而已。
当然,语言并没有高低贵贱之分,而对语言掌握的好不好,说的好不好是有高下之别的。
一个语言都有哪些要素呢?语法就是其中一个重要的方面,比如你要对你所喜欢的人表达爱慕之情,那么你应该说“我爱你”,你不能说“你爱我”,因为这搞错了主谓宾关系,因此我们通常都需要按照一定的规矩和原则表达才会让别人正确理解我们真正的含义。
VS2010 C++错误处理办法
VS2010 C++错误处理办法(转载)vs2010中文旗舰版怎么出现创建新项目失败???你可以试试:开始-> 所有程序-> 附件-> 命令提示符(右键点击一管理员身份运行)。
打开后,再输入Regsvr32 JScript.dll。
错误:1 fatal error C1010: unexpected endof file while looking for precompiled header. Did you forget to add '#include"StdAfx.h"' to your source?#include"StdAfx.h" 你把这个放在头文件里面就行了2 vc++编程出现错误error C2447: missing function header (old-styleformal list?)原因:函数后面多了分号;SUNSHINE_APISSN_RETURN SsnWriteProfileString(__in INT nPlugInId, __in_opt LPTSTRlpszGroupName, __in LPTSTR lpszKey, __in LPTSTR lpszValue);3 errorC2491: 'SsnWriteProfileString' : definition of dllimport function not allowed错误C2491:―SsnWriteProfileString‘:dllimport函数的定义不允许的SUNSHINE_API SSN_RETURNSsnWriteProfileString(__in INT nPlugInId, __in_opt LPTSTR lpszGroupName, __inLPTSTR lpszKey, __in LPTSTR lpszValue)查看SUNSHINE_API在 .h文件中的定义#ifdefSSNAPI_EXPORTS#define SUNSHINE_API __declspec(dllexport)#else#define SUNSHINE_API __declspec(dllimport)#endif将#ifdef SSNAPI_EXPORTS添加到#include<stdafx.h>的下面;形如:#include<stdafx.h>#defineSSNAPI_EXPORTS则解决;4 error C2065: “CString”:未声明的标识符在非mfc下使用CString 会导致上面错误:解决办法:(1)如果你使用那么:使用MFC:包含cstringt.h;不使用MFC:包含atlstr.h(2)或者#include <afx.h>5 error C2065: 'DEBUG_NEW' : undeclared identifier?删除 .cpp 文件中的#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE[]=__FILE__;#define new DEBUG_NEW#endif6 问题:error C2440: 'initializing' : cannot convert from 'constchar [34]' to 'TCHAR [128]'错误C2440:“初始化”:不能把'字符常量[34]' ' TCHAR[128]'原因:编译选项有没有开了UNICODE;做法:在vs2010下设置unicode编译选项,去掉unicode模式,具体设置方法为:项目-》属性-》配置属性-》字符集-》未设置project->Properties->ConfigurationProperties->General->Character Set->Not Set /hrh2010/article/details/66812717问题:C1083:Cannot open include file: 'stdafx.h': No such file or directoryC1083:无法打开包括文件:―stdafx.h中‖:没有这样的文件或目录解决:stdafx.h文件和工程的.h文件放在一个位置;8 error C2065: “cout”: 未声明的标识符解决方法:加上#include <iostream>using namespace std;9 错误:error C3872: '0x3000': thischaracter is not allowed in an identifier错误C3872:'0 X3000“:此字符不允许在标识符0x3000是汉语的空格,也就是全角空格,相当于一个汉字,但你又看不见它。
编程初学者的十个常见错误及如何避免
编程初学者的十个常见错误及如何避免编程是一项需要刻苦学习和实践的技能,初学者常常会犯一些常见的错误。
这些错误可能会导致程序无法正常运行,或者产生错误的结果。
在接下来的文章中,我们将讨论十个常见的编程错误,并提供一些解决方法,以帮助初学者避免这些错误。
1.语法错误语法错误是编程中最常见的错误之一,它们在编译或解释代码时会导致语法分析器报错。
这些错误包括拼写错误、缺失的逗号或分号,或者不正确的代码结构。
为了避免这些错误,初学者需要仔细检查他们的代码并了解编程语言的语法规则。
此外,使用集成开发环境(IDE)可以帮助自动检测这些错误。
2.拼写错误拼写错误是另一个常见的错误。
在编写代码时,初学者可能会犯常见的拼写错误,如将变量名称拼写错误或者忽略大小写。
为了避免这些错误,建议初学者仔细检查他们的代码,并使用有意义的变量和函数名称,以减少拼写错误的可能性。
3.访问超出数组范围当初学者使用数组时,他们可能会尝试访问超出数组边界的索引。
这种错误可能会导致程序崩溃或产生错误的结果。
为了避免这些错误,初学者需要注意数组的大小,并确保他们访问的索引在有效范围内。
4.不正确的变量作用域变量的作用域是指变量在代码中可见的范围。
当初学者在不了解变量作用域规则的情况下使用变量时,他们可能会犯错误。
例如,在一个循环中声明一个变量,并尝试在循环外部访问它。
为了避免这些错误,初学者需要理解变量作用域的概念,并正确地声明和使用变量。
5.逻辑错误逻辑错误是编程中最难调试和解决的错误之一。
它们发生在程序的逻辑或条件判断中,导致程序产生错误的结果。
为了避免这些错误,初学者应该仔细检查他们的逻辑以及条件判断,并使用调试工具来找出问题所在。
6.死循环死循环是一种无限循环,程序无法跳出循环而终止。
这通常是由于程序员在循环条件中使用了错误的判断条件或错误的循环终止条件引起的。
为了避免死循环,初学者需要确保他们在循环条件中使用正确的判断条件,并在必要时正确地更新循环计数器,以确保循环会终止。
VS2010DirectX11SDKWindowsSDK编程过程中的错误异常解决方案记录
VS2010DirectX11SDKWindowsSDK编程过程中的错误异常解决⽅案记录ID3DBlob 未声明的标记符 undefined signalID3DBlob 定义在 D3DCommon.h 中, 但是使⽤ vs2010 & DirectX11 联合开发时, D3DCommon.h 会有两份, 如我的环境是:C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include\D3DCommon.hD:\Program Files\Microsoft DirectX SDK (June 2010)\Include\D3Dcommon.h这样, 即使在项⽬中有包含 d3dx11.h (包含 D3DCommon.h) 也不能正确进⾏编译, 需要将 DirectX11 sdk 包含⽬录在 Windonws sdk 的前⾯, 如:D3DCOMPILE_ENABLE_STRICTNESS 未声明标记符D3DX11CompileFromFile() 创建加载并编译 shader⽂件时需要⽤到的 shaderFlags , 定义在 D3DCompiler.h 中, 需要 includexnamath.h 报错: 在标识符“XMConvertToRadians”的前⾯如下报错:1>d:\program files\microsoft directx sdk (june 2010)\include\xnamath.h(159): error C2146: 语法错误: 缺少“;”(在标识符“XMConvertToRadians”的前⾯)1>d:\program files\microsoft directx sdk (june 2010)\include\xnamath.h(159): error C2433: “FLOAT”: 不允许在数据声明中使⽤“__forceinline”1>d:\program files\microsoft directx sdk (june 2010)\include\xnamath.h(159): error C4430: 缺少类型说明符 - 假定为 int。
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或者百度。
VC2010中初学者常见错误、警告和问题
《Visual C++ 2010入门教程》系列四:VC2010中初学者常见错误、警告和问题这一章将帮助大家解释一些常见的错误、警告和问题,帮助大家去理解和解决一些常见问题,并了解它的根本原因。
iostream.h与<iostream>下面的代码为什么在VC2010下面编译不过去?#include <iostream.h>int main(){cout<<"Hello World."<<endl;return 0;}错误信息:fatal error C1083: 无法打开包括文件:“iostream.h”: No such file or directory造成这个错误的原因在于历史原因,在过去C++98标准尚未订立的时候,C++的标准输入输出流确实是定义在这个文件里面的,这是C风格的定义方法,随着C++98标准的确定,iostream.h已经被取消,至少在VC2010下面是这样的,取而代之的是我们要用<iostream>头文件来代替,你甚至可以认为<iostream>是这样定义的:namespace std{#include "iostream.h"}因此我们可以简单的修改我们的Hello World。
#include <iostream>using namespace std;int main(){cout<<"Hello World."<<endl;return 0;}iostream.h是属于C++的头文件,而非C的,因此标准订立的时候被改成了<iostream>。
而C的头文件stdio.h等依然可以继续使用,这是为了兼容C代码。
但是它们依然有对应的C++版本,如<cstdio> <cstdlib>等。
C 语言初学者有哪些常见的基本错误?
C语言是一门广泛使用的编程语言,但对于初学者来说,学习过程中会遇到一些常见的基本错误。
这些错误可能会导致程序出错或者无法正常运行,因此了解和避免这些错误是非常重要的。
1.拼写错误拼写错误是初学者经常犯的错误。
在C语言中,拼写错误可能会导致程序无法编译或者运行错误。
例如,将“printf”拼写为“prinf”或者将“main”拼写为“mian”都会导致程序无法编译。
为了避免这种错误,建议初学者在编写代码时仔细检查拼写,或者使用IDE(集成开发环境),它可以自动检查拼写错误并提供纠正建议。
2.语法错误语法错误是初学者常见的错误之一。
在C语言中,语法错误可能会导致程序无法编译或者运行错误。
例如,忘记添加分号或者花括号不匹配都会导致程序无法编译。
为了避免这种错误,建议初学者仔细阅读代码,并确保所有语法都是正确的。
使用IDE可以帮助初学者检测语法错误。
3.数组越界数组越界是初学者常见的错误之一。
在C语言中,数组越界可能会导致程序崩溃或者出现未定义的行为。
例如,访问数组中不存在的元素或者访问超出数组范围的元素都会导致数组越界。
为了避免这种错误,建议初学者确保数组索引在数组范围内,并使用循环结构来遍历数组。
使用IDE可以帮助初学者检测数组越界错误。
4.变量未初始化变量未初始化是初学者常见的错误之一。
在C语言中,未初始化的变量可能会导致程序出现未定义的行为。
例如,未初始化的变量可能包含随机值或者空值。
为了避免这种错误,建议初学者在使用变量之前初始化它们。
使用IDE可以帮助初学者检测未初始化的变量。
5.内存泄漏内存泄漏是初学者常见的错误之一。
在C语言中,内存泄漏可能会导致程序消耗大量内存并最终崩溃。
例如,未释放动态分配的内存或者重复释放内存都会导致内存泄漏。
为了避免这种错误,建议初学者在使用动态内存分配时,确保释放所有分配的内存。
使用IDE可以帮助初学者检测内存泄漏。
C语言初学者常见的基本错误包括拼写错误、语法错误、数组越界、变量未初始化和内存泄漏。
VC6升至VC2010的常见错误及处理
从VC6.0到VC2008-转自CSDN博客(/orbit)一、_WIN32_WINNT 与_WIN32_IE 设置冲突_WIN32_WINNT 与_WIN32_IE设置不兼容会导致如下C1189致命错误:StdAfx.cppc:\program files\microsoft sdks\windows\v6.0a\include\sdkddkver.h(217) : fatal error C1189: #error :_WIN32_WINNT settings conflicts with _WIN32_IE settingStdAfx.cpp通常是项目中第一个编译的文件,这个错误将导致编译无法继续进行。
产生这个错误的原因是原因是_WIN32_WINNT的版本定义太老,老的VC代码对_WIN32_WINNT的典型设置是:#ifndef _WIN32_WINNT#define _WIN32_WINNT 0x0400#endif0x0400相对于VS2008所带的Plarform SDK(在文件sdkddkver.h中)中_WIN32_IE的定义来说太老了,导致不兼容,可以将其改成0x0501或更高的版本避免这个问题,如下所示:#ifndef _WIN32_WINNT#define _WIN32_WINNT 0x0501#endif也可以将这三行_WIN32_WINNT定义删除,这样就会使用Plarform SDK中的_WIN32_WINNT定义,自然就不存在不兼容问题了。
不过出于对老版本VC的兼容考虑(毕竟以后可能还要使用VC6编译代码),最好这样修改:#if _MSC_VER <= 1200 // MFC 6.0 or earlier#ifndef _WIN32_WINNT#define _WIN32_WINNT 0x0400#endif#endif二、afximpl.h文件中的语法错误MFC出现的时候STL还没有成为C++的标准,所以MFC使用一套自己的模版库,比如CArray、CList、CMap等等,这些类型声明都在afximpl.h文件中。
Visual Studio 2010 各种各样的错误的预解决方案
Visual Studio 2010 各种各样的错误的预解决方案devenv/resetskippkgs由于我很喜欢安装各种各样的VS插件,加上本人是VS Add-Ins业余开发者,整得VS IDE经常会遇到这个错误,那个错误。
而我非常喜欢devenv /resetskippkgs。
刚开始我并不知道这个命令有什么用,只知道它可以让我的VS IDE正常工作。
在上半年的时候,我的VS IDE又遇到这样的一个问题,是在安装了VSCommands for Visual Studio 2010这个插件后才出现的问题。
每次我用VS IDE打开css文件的时候,就会提示“未能完成操作,未指定的错误”,害得我只能用记事本打开并编辑css文件。
直到最近,我在博客里乱逛,看到一个命令,很熟悉,突然想起我以为用过这个命令,貌似很有用的样子,于是就尝试了一下。
很惊喜,苦恼终于解决了。
而且VS IDE的启动速度快了不少。
然后我就去MSDN查了一下,官方解释如下:将为了避免载入有问题的VSPackage而由使用者加入VSPackage的所有SkipLoading标记清除。
其实就是恢复Visual Studio默认设置的意思。
Visual Studio Industry Partner (VSIP) program 的參與者可以使用下列參數。
这是一个很好用的命令,例如:1。
未能正确加载包"xxxx xxxx xxxx xxxx"(GUID={xxxx xxxx xxxx xxxx})。
特别点名这个错误,最可恨了,异常中的80%都是它。
2。
在VS2010里添加强类型DataSet时,提示“An Unexpected Exception”。
等等之类的错误,都可以先尝试一下:devenv /resetskippkgs。
vc常见错误提示
VC常见错误提示1.错误信息(1) fatal error C1o04 unexpected end of file found致命错误:未找到文件末尾(一般是缺少括号造成的问题)。
(2) fatal error C1021, invalid preprocessor command include致命错误:无效的编译预处理命令'include'(3) fatal error C1083: Cannot open include file: 'stdi. h': No such file or directory致命错误:不能打开头文件stdi.h:文件或文件夹不存在。
(4) error C2101: '&'on constant不能计算常量的地址(5) error C2059: syntax error: while在while附近存在语法错误。
(6) error C2061: syntax error: identifier 'x'标识符x的附近存在语法错误(7) error C2065: 'i': undeclared identifier变量i未定义。
(8) error C2078: too many initializers数组/结构等变量初始化时的数据太多。
(9) error C2087:'<Unknown>': missing subscript丢失数组下标。
(10) error C2106: '=': left operand must be l-value=的左侧应当是左值,即不能是常量。
(11) error C2115:'=': incompatible types '='两侧的类型不兼容。
(12) error C2133: 'a': unknown size aa的大小未知(可能是数组名)。
VS2010入门经典
接下来我会做一个《Visual C++ 2010 入门教程》系列,用来帮助初学者。 刚开始学的时候是很痛苦的,这个我深有体会,特别是身边还没有人能够指导一 二的。内容主要涵盖在 Windows 下面使用 C++进行开发的常见内容,Visual Studio 2010 的使用,如何创建新项目,如何调试,如果配置项目属性等等,另 外还会介绍 Visual C++ 2010 中新加如的一些内容,包括一些新的 STL 组建,一 些新的语法支持等等。
由于本人水平有限,其中难免有错误,希望大家谅解,如果大家有发现问题 还请务必及时指出来,否则误导了他人我就罪不容恕了。
注意,本教程非 C++教程,不会教你 C++,只会教
你如何使用 Visual C++ 2010 去练习去学习其它 C++
教材上面的程序。因此建议大家认真的去看其他的
C++教程,在使用 Visual C++ 2010 实践的时候如果遇
一直以来都有不少人混淆 Visual C++和 Visual Studio,其实最初 Visual C++ 发布的时候还没有 Visual Studio 这个东西,Visual C++是一个独立的开发工具, 与 Visual Basic 等并列,最后微软将它们整合在一起组成了 Visual Studio。
VS2010控制台项目编译过程中常见问题解决办法
VS2010控制台项目编译过程中常见问题解决办法一、“转换到COFF 期间失败文件无效或损坏”问题在更新VS2010,或者卸载VS2012安装2010后,建立Win32 Console Project/MFC项目时会出现“LINK:fatal error LNK1123: 转换到COFF期间失败:文件无效或损坏”的错误。
错误描述:图1. 错误描述解决方案:第一步:将项目——项目属性——配置属性——链接器——清单文件——生成清单由“是”改为“否”。
然后“确定”。
若还不能解决问题进入第二步。
图2.修改配置图3.修改配置后编译成功第二步:查看计算机是否为64bit操作系统,如是,继续如下操作。
查找是否有两个cvtres.exe。
C:\Program Files(x86)\Microsoft Visual Studio 10.0\vc\bin\cvtres.exeC:\Windows\\Framework\v4.0.30319\cvtres.exe右键属性—详细信息,查看两者版本号,删除/重命名较旧的版本,或者重新设置Path变量。
治本的办法是第二步,删除旧版本的cvtres.exe后,就不需要每次都设置配置了。
二、VS2010 控制台输出乱码问题点运行中的CMD.EXE 窗口左上角,出现菜单,选“属性”一看,“属性”中的“当前代码页”框框里写着这么一行:“437 (OEM-美国)”,问题关键就是这里。
重新点出菜单,选“默认值”项,发现“默认值”里的“当前代码页”是可以设置,有两个选项:“437 (OEM - 美国)”和“936 (ANSI/OEM - 简体中文GBK)”,将“当前代码页”设置为“936 (ANSI/OEM - 简体中文GBK)”,点“确定”,没有发现一点反应。
重运行一下“CMD.EXE”,发现问题依旧,“默认值”中“当前代码页”设置是“936 (ANSI/OEM - 简体中文GBK)”,可是“属性”中“当前代码页”的设置还是“437 (OEM - 美国)”,输不了中文也显示不了中文。
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就行了。
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”:没有这样的文件或目录。
Microsoft_Visual_Studio_C++_2010入门教程(修订版)
《Visual C++2010入门教程》写在前面在我还在上学的时候,我选择了C++,最初我用VC6作为我的IDE,我看过很多本C++的教材,有的适合我,有的不适合我,其中有一本叫《Visual C++2005入门经典》的书帮了我不少的忙。
因为通常的C++教材都只会介绍C++的语法什么的,很少会告诉我们如何去编译、运行,告诉我们什么是控制台程序,什么事Win程序,什么是GUI程序,C++能干什么,VC和C++的区别是什么。
现在有很多的朋友应该也有这些问题吧?学C++用C++也有几年了,算不上熟悉,算是初窥门径吧,我想我应该做点什么帮助一下那些和曾经的我一样困惑的朋友,特别是学生朋友,告诉他们他们所困惑的问题的答案。
记得我学C++的时候,没有人教,有的时候也走了不少弯路,甚至连调试也不会,也不知道可以通过看调用堆栈看调用次序,还自己慢慢的去搜索,好傻啊。
接下来我会做一个《Visual C++2010入门教程》系列,用来帮助初学者。
刚开始学的时候是很痛苦的,这个我深有体会,特别是身边还没有人能够指导一二的。
内容主要涵盖在Windows下面使用C++进行开发的常见内容,Visual Studio2010的使用,如何创建新项目,如何调试,如果配置项目属性等等,另外还会介绍Visual C++2010中新加入的一些内容,包括一些新的STL组建,一些新的语法支持等等。
由于本人水平有限,其中难免有错误,希望大家谅解,如果大家有发现问题还请务必及时指出来,否则误导了他人我就罪不容恕了。
注意,本教程非C++教程,不会教你C++,只会教你如何使用Visual C++2010去练习去学习其它C++教材上面的程序。
因此建议大家认真的去看其他的C++教程,在使用Visual C++2010实践的时候如果遇到问题可以到这里来参考。
推荐《C++库Primer》、《C++程序设计语言》《Visual C++2008入门经典》。
度文第一章:关于Visual Studio、VC 和C++的那些事首先,这三个东西有什么区别呢?VC 和C++是相同的吗,有什么区别呢?我刚开始学C++的时候也有这样的问题,在这里我来替大家解释一下他们到底是什么。
VC++2010使用CFile的一些问题
关于VC++2010版本使用CFile完成文件读写的一系列问题先申明一下,我也是一名初学者,这个是在我自己学习的过程中遇到的问题,然后百度上面写的也不是那么详细,最后…过后,终于知道怎么解决了,决定自己写一个比较详细一点的,大神觉得写得不好的地方就不要吐槽了,直接飘过就OK了.首先拖放控件:首先给”写入文件”,”读取文件”这两个Button 换一个ID吧(这个随便改不改,或者是改成什么都无所谓的吧),然后分别给这两个Button 添加消息相应函数(这个直接在Button上面双击两下就可以了),如下:接下来就是写按下这两个Button的时候应该做什么了,先来”写入文件”的,如下:“读取文件”,如下:接下来就应该是迫不及待的要编译一下了,有点小小的兴奋,然后我们测试一下效果呢.好了,这时候1.txt就已经在桌面上出现了,让我们打开看看.为什么只有5个数呢,我们先来看看这个文件有多大.10字节是没错的,但是为什么只写入了5个数,好吧,肯定是写入的时候给的字符串长度不够,那就先改一下,我们在”写入文件”的相应函数中找到我们将file.Write(str,str.GetLength());改成file.Write(str,2 *str.GetLength());这样再来试试,还是写1234567890.这样貌似就可以了?那我们来试试“读取文件”,结果是这样的:这下就没辙了,然后问百度,百度说是最近几个版本的编译器使用时钟叫做Unicode的编码,然后取消掉就搞定了,下面是步骤:改成这样:接下来还要改一些地方,首先得把我们之前加的2 *删除了,接下来把这些字符串之前的L(这是一个强制转换类型的宏) 删除,接下来编译使用就妥妥的没问题了,读取和写入都一切正常,但是问题又来了,里面的控件怎么变样子了,看起来一点都不爽,还以为是用XP呢,然后又是换了各种问法问百度,最后才找到解决方案,我们先打开”stdafx.h”这个文件,然后我们发现这里有一个定义Unicode编码的预编译指令,里面定义的就是控件风格,好了,这下知道该怎么做了吧,那就只直接把预编译指令注释起来,然后编译一下,这下终于没问题了,功能也可以用了,一切OK.最后就感谢百度上面的各种大神.欢迎指出各种问题,这个联系方式嘛,smooth_criminal@.。
C语言新人常见问题与错误
C语言新人常见问题与错误C语言新人常见问题与错误不知不觉,学习C语言也快一年了。
虽然有C语言课,但是老师完全让我们自己看书,在自学的过程中,和周围同学交流中,以及后来在CSDN,BCCN,百度知道看帖回帖中,也看到许多C语言新人常遇到的问题与常犯的错误。
不妨看看吧。
以下仅供参考!对于完整的修正后的程序都在code::blocks 10.05(编译器gcc,调试器gdb,平台windows 7旗舰版)上运行过。
1、程序画面一闪而过#includeint main(void){ int iSignal; /*定义变量表示信号灯的状态*/ printf("the Red Light is 0,the Green Light is 1"); /*输出提示信息*/ scanf("%d",&iSignal); /*输入iSignal变量*/ if(iSignal==1) /*使用if语句进行判断*/ { printf("the Light is green,cars can run"); /*判断结果为真时输出*/ } if(iSignal==0) /*使用if语句进行判断*/ { printf("the Light is red,cars can't run"); /*判断结果为真时输出*/ } return 0;}解析:在XP以上的系统用win-tc,dev-cpp等IDE编译运行此程序时,无论输入什么数字,结果都是一闪而过,因为程序执行完语句后就直接退出了。
解决方案:这里有几个办法:(1):在程序开头加上#include,然后在程序末尾加上system("pause");此方法仅适用于MS-DOS,windows,不适用于*nix等系统(2):在需要暂停的地方加入一个或两个get);这种方法,实质上并不是暂停程序,而是让程序等待用户输入若干个回车。
VS2010运行C程序问题解决
VS2010运行C语言相关问题(本人测试系统WIN7旗舰版64位)问题一:相信学习C语言的同学们一直在为自己的windows7不能用vc 6.0而烦恼着。
或许有的电脑能使用上,但绝大多数是不能的,而且会出现软件不能兼容的提醒以及一些不知名问题。
其实大家都不需要再使用vc6.0了,目前vs已经升级到了2013版本。
VS2010 /VS2012 / VS2013都能够在win7(32or64)、win8中完美运行。
但在这些软件中运行C语言,可能会遇到一些问题,但他不是VC6.0那样的缺陷,只要解决了完全可以完美。
我们必须对其进行设置后才能编写语言。
一、打开VC++2010二、文件—》新建—》项目三、在左边的最近模块选着“Win32”,在右边对话框选着“Win32控制台应用程序Visual C++”,再在下面输入“名称”和“位置”,点击“确定”四、在弹出来的对话框中选着“下一步”五、注意:在“附加选项”下选着“空项目”,其他的不动,点击完成六、回到主界面后,在左边的“解决方案资源管理器”,右击“源文件”—》“添加”—》“新建项”七、注意:在中间的对话框中选着“C++文件(.cpp)”,输入文件“名称”—》“添加”(注意要把文件名改成“名称”+“.c”,不然默认的是“.cpp”,仍然编译不了)八、写入一个C语言程序,你就发现成功了菜单栏——调试——编译九、以后需要继续编程的只需要将源文件下原来的.cpp文件右健移除(注意一次只能编写一个文件,只是移除,目录下仍存在,不必担心),再按照第六步下来就行啦。
问题二新装了Vs2010后经常遇到卡死,鼠标经常动不了?有个解决办法打开vs2010菜单栏中--工具-选项-常规-视觉体验,这里的3项都不要勾选。
这样就解决了。
问题三在运行C语言程序时,dos窗口(显示窗口)会一闪而过看不到运行结果?这个问题有几个解决办法,看自己喜欢随便用一个1)在main()函数的末尾加一个system("pause"); 此时头文件应有(可以没有)#include<stdlib.h>注意:主函数末尾有return 0;时system("pause");加在return 0;前2)在main()函数的末尾加一个getch(); 此时头文件应有(可以没有)#include<conio.h>这个不怎么常用注意:主函数末尾有return 0;时getch();加在return 0;前3)非调试状态下运行,直接按按Ctrl+F5运行调试;如果按F5调试的话,就会出现一闪而过的情况,但该方法不适用于生成的exe文件;这个用起来比较方便4)给程序加一个任务,即定义一个内联函数inline void keep_window_open(char ch;cin>>ch;),然后在mian函数末尾加上keep_Window_open();这个方法是最有效也是最常用的,网上很多方法原理都类似于此。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《Visual C++ 2010入门教程》系列四:VC2010中初学者常见错误、警告和问题2010年06月27日星期日上午 11:21这一章将帮助大家解释一些常见的错误、警告和问题,帮助大家去理解和解决一些常见问题,并了解它的根本原因。
iostream.h与<iostream>下面的代码为什么在VC2010下面编译不过去?#include <iostream.h>int main(){cout<<"Hello World."<<endl;return 0;}错误信息:fatal error C1083: 无法打开包括文件:“iostream.h”: No such file or directory造成这个错误的原因在于历史原因,在过去C++98标准尚未订立的时候,C++的标准输入输出流确实是定义在这个文件里面的,这是C风格的定义方法,随着C++98标准的确定,iostream.h已经被取消,至少在VC2010下面是这样的,取而代之的是我们要用<iostream>头文件来代替,你甚至可以认为<iostream>是这样定义的:namespace std{#include "iostream.h"}因此我们可以简单的修改我们的Hello World。
#include <iostream>using namespace std;int main(){cout<<"Hello World."<<endl;return 0;}iostream.h是属于C++的头文件,而非C的,因此标准订立的时候被改成了<iostream>。
而C的头文件stdio.h等依然可以继续使用,这是为了兼容C 代码。
但是它们依然有对应的C++版本,如<cstdio> <cstdlib>等。
记住,在VC2010上面采用C++风格的头文件而不是C风格的头文件,除非你是在用C。
warning C4996这是一个警告,请看下面的代码:#include <iostream>using namespace std;int main(){char sz[128] = {0};strcpy( sz, "Hello World!" );cout<< sz << endl;return 0;}上面的strcpy会产生这个警告:warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use_CRT_SECURE_NO_WARNINGS. See online help for details.这是因为VC从2005版本开始,微软引入了一系列的安全加强的函数来增强CRT(C运行时),这里对应的是strcpy_s。
_s意为safe的意思,同样的道理,strcat也是同样。
因此要解决这个问题,我们可以用strcpy_s来替换strcpy,但是注意strcpy_s并非所有编译器都提供,因此如果要跨编译器,请采用错误信息中所提示的方式,定义_CRT_SECURE_NO_WARNINGS宏来掩耳盗铃吧。
另外注意并非所有的加强函数都是在屁股后面加_s,比如stricmp这个字符串比较函数的增强版名字是_stricmp。
下面,用strcpy_s来更改程序:int main(){char sz[128] = {0};strcpy_s( sz, "Hello World!" );cout<< sz << endl;char* pSz2 = new char[128];strcpy_s( pSz2, 128, "hello");cout<< pSz2 << endl;delete pSz2;return 0;}注意,strcpy_s有两个版本,一个可以帮助我们自动推断缓冲区的大小,而另外一个不能帮助我们推断,因此在编译器不能推断缓冲区大小的时候,我们需要自己指定缓冲区的大小,如上面的程序所演示的那样,关于增强版的函数请参考我写的《深入学习C++ String2.1版》。
TCHAR、wchar_t、char请大家看下面这个程序:#include <iostream>#include <Windows.h>#include <tchar.h>using namespace std;int main(){MessageBox( NULL, "你好HelloWorld!", "Information", 0 );return 0;}貌似没什么问题吧?错了,如果你是按照我教你的方法创建的控制台空工程的话,那么会有编译错误:error C2664: “MessageBoxW”: 不能将参数 2 从“const char [17]”转换为“LPCWSTR”这个问题太普遍了,几乎所有的初学者都会遇到而且感到难以应付,因为按照提示使用(LPCWSTR)强制转型貌似并不能帮助我们解决问题,而且这个程序在VC6下面应该是没有任何问题的,那问题出现在哪里呢?问题在这里,请右键单击解决方案浏览器下面的项目,属性,问题的根本就是字符集问题,在VC6中,我们默认使用的是多字节字符集,而现在我们默认需要的是UNICODE字符集,简单的,我们把这个字符集改成多字节字符集这个问题就解决了:再试试应该就可以了吧?但是我并不推荐大家这么做,因为让自己的程序适应各种字符集是我们写代码的人义不容辞的义务。
我们把程序改成下面这样:#include <iostream>#include <Windows.h>#include <tchar.h>using namespace std;int main(){MessageBox( NULL, TEXT("你好HelloWorld!"), TEXT("Information"), 0 ); MessageBox( NULL, _T("你好HelloWorld!"), _T("Information"), 0 );return 0;}用两个宏TEXT或者_T都可以解决这个问题,它们两个并没有太大区别,也许区别在于前者是通过windows.h头文件引入的,而_T是通过tchar.h引入的,我推荐大家使用_T和tchar.h,因为tchar.h还帮助我们引入了其它一些很有用的宏,比如_tcscpy_s,这个宏在使用UNICODE字符集的时候被替换成wcscpy_s,在使用多字节字符集的使用被替换成strcpy_s。
关于这部分的内容,请大家不要错过《Windows核心编程》的第二章(第四版或第五版都可以),以及《深入学习C++ String2.1版》。
它们都有提到。
有人听说_T可以把多字节字符串转换成UNICODE,因此他写了如下的代码:const char* pStr = "haha哈哈";MessageBox( NULL, _T(pStr), _T("Information"), 0 );当然,除非你运气好的抓狂,否则你是编译不过去的,为什么呢?我们现在应该知道对于"Hello"这样的字符串,VC2010会默认的将它视为const char*,即多字节字符串,而L"Hello"前面有个L前缀的被视为UNICODE字符串,这和C#是有区别的,因为C#的字符串总是被视为UNICODE,C++/CLI下面编译器也会帮助我们做到这件事情,所以它们不需要L(C++/CLI兼容L这种写法)。
让我们看看_T的定义吧:#define wxCONCAT_HELPER(text, line) text ## line/* could already be defined by tchar.h (it's quasi standard) */#ifndef _T#if !wxUSE_UNICODE#define _T(x) x#else /* Unicode *//* use wxCONCAT_HELPER so that x could be expanded if it's a macro */#define _T(x) wxCONCAT_HELPER(L, x)#endif /* ASCII/Unicode */#endif /* !defined(_T) */_T在UNICODE下面最终会被替换成L ## x。
##是一个编译预处理指令,意味着让L和x贴在一起,比如L ## "Hello"最终就是L"Hello",因此它可以把"Hello"转换成UNICODE字符串。
那为什么上面的程序不行呢?让我们看看_T("pStr")会被替换成什么:L ## pStr -> LpStr,哦,LpStr是一个新的标识符,如果你没有定义过它,你当然不能通过编译啦。
因此我们可以了解到_T这样的宏只能处理直接的常量字符串,不能处理其它的情况。
而我们上面演示的那种情况需要我们动态的去转换编码,Windows 有API可以帮助我们做到,C库也有函数可以帮助我们。
恰好我曾经写过这样的代码,欢迎大家参考:ASCII/UNICODE/UTF8字符串互相转换的C++代码对于_T宏,再说一点东西,或许你会感到奇怪为什么_T不直接定义成#define _T(x) L ## x,而要绕个圈子去调用wxCONCAT_HELPER呢?这实际上涉及到宏展开顺序和截断的问题。
在这里,我们需要说一个宏参数的概念,这很函数的参数是类似的,这里_T(x)的x就是宏参数,好,记住下面一句话:如果你定义的宏中使用了#或者是##的话,宏参数将不会被展开,也就是说_T(x)如果直接定义成L##x那么在下面这种情况就会出错( PS: #是给参数加引号的意思):_T(__FUNCTION__),__FUNCTION__是一个预定义的宏,它代表了当前函数的名字,这个展开会是什么呢?L__FUNCTION__。