这部分将帮助大家解释一些常见的错误、警告和问题,帮助大家去理解和解决一些常见问题,并了解它的根本原因。
下面的代码为什么在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下面是这样的,取而代之的是我们要用头文件来代替,你甚至可以认为是这样定义的:
因此我们可以简单的修改我们的Hello World。
using namespace std;
int main()
{
cout<<"Hello World."<<endl;
return 0;
}
这是一个警告,请看下面的代码:
#include <iostream>
using namespace std;
int main()
{
char sz[128] = {0};
strcpy( sz, "Hello World!" );
cout<< sz << endl;
return 0;
}
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;
}
#include <iostream>
#include <Windows.h>
#include <tchar.h>
using namespace std;
int main()
{
MessageBox( NULL, "你好HelloWorld!",
"Information", 0 );
return 0;
}
#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;
}
const char* pStr = "haha哈哈";
MessageBox( NULL, _T(pStr), _T("Information"), 0 );
#define wxCONCAT_HELPER(text, line) text ## line
#ifndef _T
#endif
void print()
{
}
#include <iostream>
using namespace std;
#include "Test.h"
#include "Test.h"
int main()
{
return 0;
}
#ifndef __TEST_H__
#define__TEST_H__
代码
#endif
1>test.obj : error LNK2005: "void __cdecl print(void)" (?print@@YAXXZ) 已经在 Main.obj 中定义
1>e:\documents\visual studio 2010\Projects\HelloWorld\Debug\HelloWorld.exe : fatal error LNK1169:找到一个或多个多重定义的符号
void print();
int main()
{
print();
print();
return 0;
}
工程Setup发布:
1、制作安装文件的过程中,一般会出现几个warning,都是说某dll文件是系统自带的,不用加入安装包中之类的。建议把这些dll从你生成的filesystem中删除,否则有可能遇到系统版本问题。我遇到的相关具体问题是在win7下做的安装包到了xp下就无法安装和运行了。
2、关于快捷方式。我采用的方法是(不知道算不算一种猥琐的方法):先将你编译好的Realse文件夹下面的exe文件添加到你的file system里。然后右键file system里添加好的exe文件,会看到生成快捷方式的选项。生成快捷方式后,再将快捷方式剪切复制到user desktop等文件夹中去。
5、.默认安装路径等,在setup工程的property里都可以调整。
主函数main
在VC++编程中,我随便选择了一个以前的程序准备编译,结果报错。一开始怀疑我自己的问题,于是写了一个最简单的程序,还是报错,如下:
好奇下,决定用微软自己的用例跑跑。于是新建了一个工程,并且选择Precompiled header,生成的工程如图:
这时恍然大悟,原来是入口函数有问题。正在做茅塞顿开状,一个学长提醒我到,从VS2005,微软定义的入口函数就是_tmain了,听了我还不相信,因为自己从来都是用main在VS2008中通过编译的。后来在VS2008中生成工程,果然如学长所说。正在郁闷中,学长又提醒我可以设置工程的预编译项,于是自己试了试,果然成功了,在改了以后的设置中,VS2010也可以跑通了。
方法如下:*代表当前工程名
project ->
再到Configuration Properties中选择)C/C++ -> Precompiled Header -> Precompiled Header值改为Use(/Yu),OK了!
总结:VS2008及以前的配置中,默认都是选择了类似的配置,VS2008中是:Use
Precompiled Header (/Yu)
vs2010中怎么写个简单的C++程序?
#include <iostream>
void main(void)
{
count<<"hi";
}
在vs2010中编写以上程序
报错:
2
运行结果:
1>------ Build started: Project: test, Configuration: Debug Win32 ------
1>
1>c:\users\shiechian\documents\visual studio 2010\projects\test\test\test.cpp(4): error C2065: 'count' : undeclared identifier
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
还出现这个
这是什么原因?
相关答复:
cout写错了,同时还没有添加名字空间std(标准c++里是需要的,vc6与标准不符,后来新版的vs都与标准一样了)
#include <iostream>
using namespace std;
void main(void)
{
cout<<"hi";
}
vs 2010中VC++的6个新特点
一、Visual C++工程及其构建系统
(一)MSBuild
如今,Visual C++处理方案和项目都运用MSBuild执行构建,从而取代了原来的构建工具VCBUILD.exe。关于其他的Visual Studio言语和项目类型,MSBuild提供了一样的灵敏性,可扩展性和基于XML的构建支持工具。为此,Visual C++项目文件如今也运用了盛行的XML文件格式,并具有.vcxproj文件扩展名。另外,从前期版本的Visual Studio中提供的项目文件将被自动转换为新的文件格式。相关MSBuild工具的更多信息,请参见文章“MSBuild(Visual C++)”。
(二)VC++目录
如今,VC++目录配置位于两个地点。你可以运用项目属性页来配置每个项目对应的VC++目录,也可以够运用属性维护器和一个属性表来配置全局性的并且使每个配置值对应的VC++目录。
(三)工程依托性
在VC++前期版本中,您可以定义存储在同一个处理方案中的项目之间的依托性。如今在这些处理方案转换为新的项目文件格式后,相应的依托性也被转换为项目到项目的援用。这种改变将会影响使用顺序,由于处理方案依托性和项目到项目的援用是不一样的。
(四)宏与环境变量
新引入的_ITERATOR_DEBUG_LEVEL宏支持针对迭代器调用调试支持。你可以运用这个宏来替代较老的_SECURE_SCL和_HAS_ITERATOR_DEBUGGING宏。
二、Visual C++库
(一)/analyze劝诫
绝大非少数的/analyze(企业代码剖析)劝诫如今都以前被从CRT,MFC和ATL库中移除。
(二)重启动维护器
假设您的使用系统出现不测关闭或重新启动情况的话,重启维护器支持自动保管文件偏重新启动您的使用顺序。比如,当您的使用顺序由于自动更新而关闭时您可以运用重启维护器来再次启动这个使用顺序。欲明白更多相关如何将使用顺序配置为运用启动维护器的信息,请参见《如何:添加剧启动维护支持》一文。
(三)MFC库
新引入的CTaskDialog类可用于替代规范的AfxMessageBox音讯框。CTaskDialog类可以显示和搜集比规范的音讯框更多的信息。
(四)新的ATL宏
又有新的宏被添加到ATL宏库中,以便进一步扩展原有的PROP_ENTRY_TYPE和PROP_ENTRY_TYPE_EX宏的现有功用。另外新添加的两个宏PROP_ENTRY_INTERFACE和PROP_ENTRY_INTERFACE_EX支持你添加一个有效的CLSID列表。开头一对新宏PROP_ENTRY_INTERFACE_CALLBACK和PROP_ENTRY_INTERFACE_CALLBACK_EX支持您指定一个回调函数,以确定某个CLSID能无法是有效的。
(五)新库
新引入的SafeInt库可以确保执行安全的算术运算,从而有效地防止了经常出现的整数溢出疑问。这个库还支持比拟不一样类型的整数。
三、集成开发环境(IDE)
(一)改进的错误智能感知支持
在Visual Studio 2010中,集成开发环境(IDE)支持更好地检测能够招致丧失智能感知支持的错误,并在这些内容下面显示以红色波浪下划线。此外,集成开发环境还支持把智能感知的错误输出到错误列表窗口中。要想观察招致疑问的相关代码,你只须要双击错误列表窗口中的错误即可。
(二)#include自动完成特征
集成开发环境还支持#include主要字的自动完成。当您键入#include时,集成开发环境将自动树立一个包括有效的头文件的下拉列表供您挑选。假设你继续输入一个文件名,集成开发环境将自动依据您的输入加以过滤。在任什么时辰候,你都可以依据这个列表来挑选你想要包括的文件。显然,这一功用可以让您高速地包括那些尚不确切知晓文件名的文件。
四、Visual C++编译器和链接器
(一)auto主要字
如今,auto主要字有了新的用途。你可以运用默许的auto主要字来声明一个变量的类型是从此变量声明的原始化表达式中推导出的。而新的/Zc:auto编译器选项支持调用auto主要字的新意义或以前的意义。
(二)decltype操作符
decltype操作符可以前往一个指定表达式的类型。因而,你可以运用decltype操作符并结合运用auto主要字来声明一个庞杂类型或许是仅为编译器所知晓的类型。比如,你可以运用这样的组合来声明一个模板函数,而此模板函数的前往类型取决于其模板参数的类型。或许,你还可以声明一个模板函数,而此模板函数调用另一个函数,然后前往被调用函数的前往类型。
(三)Lambda表达式
Lambda函数有一个函数体,但没有函数名。Lambda函数把函数指针和函数对象两者的最好特征组合到了一同。
你可以运用一个lambda函数来作为模板函数参数以替代一个函数对象,或许结合运用auto主要字来声明一个lambda类型的变量。
(四)Rvalue援用
右值rvalue援用声明符(&&)可以声明对一个右值rvalue的援用。右值援用可以使你运用静态语义(move semantics)和完备转发(perfect forwarding)来编写更有效的构造函数,普通函数和模板。
(五)static_assert声明
static_assert声明有助于在编译时测试软件中的断言,这不一样于其他那些在运转时执行测试的断言机制。假设断言失败,则编译失败并显示出指定的错误信息。
(六)nullptr和__nullptr主要字
Visual C++编译器准许您在本机代码或托管代码中运用nullptr主要字。nullptr主要字用于指出一个对象句柄、内部指针或本地指针类型并不指向一个对象。当您运用/clr编译器选项时,编译器将把nullptr解释为托管代码,而在不运用/clr选项时解释为本机代码。
微软特定的__nullptr主要字与nullptr主要字意思类似,但它只适用于本机代码。假设您运用/clr编译器选项编译本机C/C ++代码,那么编译器无法确定nullptr主要字是一个本地主要字照旧托管主要字。为了使编译器更清楚地了解你的意图,你可以运用nullptr主要字来指定现在操作为托管操作,而运用__nullptr主要字来指定现在操作为本地操作。
(七)/Zc:trigraphs编译器选项
默许情况下,三字符组(trigraphs)支持是被禁用的。在这种情况下,你可以运用/Z?: trigraphs编译器选项来启用三字符组支持。
一个三字符组由两个延续的问号后面跟着一个奇特的字符组成。编译器可以运用相应的标点符号来取代这个三字符组。比如,编译器可以运用#(数字符号)字符替代三字符组??=。你还可以在C源文件中运用三字符组,由于这些文件中运用的是不会包括某些标点字符的字符集。
(八)新的基于配置的优化选项
PogoSafeMode主要字是一个新的基于配置的优化选项。你可以运用PogoSafeMode主要字来指定你想运用安全方式照旧高速方式来优化您的使用顺序。留意,安全方式是线程安全的,但它比高速方式慢一些。高速方式是默许的优化行为。
(九)新的通用言语运转时(CLR)选项/clr:nostdlib
新引入了一个通用言语运转时(CLR)选项/clr:nostdlib。假设你的系统中包括了类似库的不一样版本,那么编译器将显示错误提示。这个新的选项可以使你扫除默许的CLR库,从而使你的顺序可以运用一个特定的版本。
(十)新的pragma指令detect_mistmatch
新引入的pragma指令detect_mismatch可以支持您运用类似的称号来替换您的文件中的某个特定的标志(相关于其他的标志)。假设类似的称号拥有多个值,衔接器会发出错误提示。
五、工具
(一)ATL控件向导
在ATL控件向导不再自动填充ProgID字段。假设一个ATL控件没有一个ProgID,那么其他工具能够无法运用这个控件。这样的一个工具的例子是“Insert Active Control”对话框。相关此对话框的更多信息,请参考文章“插入ActiveX控件对话框”。
(二)MFC类向导
Visual Studio 2010中重新引入了MFC类向导。如今,您可以在处理方案的任何地点调用类向导。MFC类向导准许您添加类、音讯和变量,而不用手动修正单个的代码文件。
六、微软宏汇编器参考
新引入的YMMWord数据类型支持AVX(英特尔高级矢量扩展)指令中包括的256位的多媒体操作数。
Visual C++延伸阅读
Visual C++是微软公司开发的一个IDE(集成开发环境),换句话说,就是运用c++的一个开发平台.有些软件就是这个编出来的...另外尚有VB,VF.只是运用不一样言语...
但是,VC++是Windows平台上的C++编程环境,学习VC要明白许多Windows平台的特征并且还要掌握MFC、ATL、COM等的知识,难度比拟大。Windows下编程须要明白Windows的音讯机制以及回调(callback)函数的原理;MFC是Win32API的包装类,须要了解文档视图类的结构,窗口类的结构,音讯流向等等;COM是代码共享的二进制规范,须要掌握其基本原理等等。
本文由VS软件圈(vssoft.net)发布,不代表VS软件圈立场,转载联系作者并注明出处:https://vssoft.net/vsazwt/VS2010anzhuangwenti/2020/0724/2212.html