Tag: visual c ++

MSVC-Wall中标准头文件中有几千个警告是怎么回事?

有些人似乎build议你使用-Wall,但是当我在一个只包含main.cpp的小testing项目上做的时候,我得到了5800个警告,其中大部分是标准头文件或windows头文件。 那是有意的行为? 我怎样才能使我的编译警告免费? 这里只是一些阅读乐趣: 1>c:\program files\microsoft visual studio 10.0\vc\include\stdint.h(105): warning C4668: '_INTPTR' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif' 1>c:\program files\microsoft visual studio 10.0\vc\include\wchar.h(109): warning C4820: '_wfinddata64i32_t' : '4' bytes padding added after data member '_wfinddata64i32_t::attrib' 1>c:\program files\microsoft visual studio 10.0\vc\include\wchar.h(114): warning C4820: '_wfinddata64i32_t' : '4' bytes padding added after […]

如何closuresVC ++项目中的Unicode?

我在Visual Studio 2008中有一个VC ++项目。 它是在编译器命令行( /D "_UNICODE" /D "UNICODE" )上定义unicode的符号,尽pipe在项目的预处理器部分中没有打开此符号。 替代文字http://i26.tinypic.com/14nz693.jpg 因此,我正在编译所有Win32库函数的Unicode版本,而不是ANSI版本。 例如在WinBase.h中,有: #ifdef UNICODE #define CreateFile CreateFileW #else #define CreateFile CreateFileA #endif // !UNICODE 在VC ++项目中打开的unicode在哪里,我怎么把它关掉?

Visual Studio 2010(任何版本)的安装只在C ++头文件目录中安装2个文件

我在Windows 7工作站上安装了Visual Studio 2010 Premium。 加载一个testingC ++项目后,我注意到它无法findiostream。 我看了一下C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ include ,注意到这里只有两个文件,srv.h和wmiatlprov.h 我在一个testing虚拟机上安装了VS2010产品,并且这个目录( … \ VC \ include )中包含了通常的文件夹和头文件(您期望在includes目录中find的材料)。 我已采取以下步骤纠正问题工作站上缺less的标题: validation我没有A / V软件活动(我正在使用MS Security Essentials,实时function被禁用) 从程序和function中卸载Visual Studio 2010 Premium和所有其他子产品 使用/ full和/ netfx参数运行VS2010卸载工具 从程序文件和程序文件(x86)中删除Visual Studio 10.0目录 从MSDN新鲜下载的ISO重新安装Visual Studio 2010。 我也完成了上述步骤,但使用了不同版本的重装VS2010 Professional。 到目前为止,上面没有任何东西能够生成已安装的Visual Studio 2010产品,并在工作站上安装了所有的C ++头文件。 想法?

gettimeofday()保证微秒的分辨率?

所以我发现自己将一个原本为Win32 API编写的游戏移植到Linux上(把Win32端口的OS X端口移植到Linux上)。 我已经实现QueryPerformanceCounter通过提供uSeconds自启动过程: BOOL QueryPerformanceCounter(LARGE_INTEGER* performanceCount) { gettimeofday(&currentTimeVal, NULL); performanceCount->QuadPart = (currentTimeVal.tv_sec – startTimeVal.tv_sec); performanceCount->QuadPart *= (1000 * 1000); performanceCount->QuadPart += (currentTimeVal.tv_usec – startTimeVal.tv_usec); return true; } 这与QueryPerformanceFrequency()给出一个恒定的1000000的频率, 在我的机器上运行良好,给我一个64位的variables,包含uSeconds自程序启动。 那么这是便携式? 我不想发现,如果内核是以某种方式编译或者类似的东西的话,它的工作方式会有所不同。 但是,对于Linux以外的其他软件,我没有任何问题。

正在使用#pragma警告推/popup正确的方式来临时改变警告级别?

偶尔很难编写不会发出警告的C ++代码。 但启用警告不失为一个好主意。 所以通常需要禁用某些特定构造的警告,并使其在所有其他代码段中启用。 到目前为止,我已经看到了两种方法。 第一个是使用#pragma warning( push )和#pragma warning( pop ) : #pragma warning( push ) #pragma warning( disable: ThatWarning ) //code with ThatWarning here #pragma warning( pop ) 第二个是使用#pragma warning( default ) : #pragma warning( disable: ThatWarning ) //code with ThatWarning here #pragma warning( default: ThatWarning ) 我在第二个版本中看到的问题是,它放弃了最初的警告级别 – 在此之前警告可能已经closures,或者它的警告级别可能已经被改变。 使用default会放弃这些改变。 第一种方法看起来很干净。 有没有问题呢? […]

如何在Visual C ++ 2008中创build一个UTF-8string文字

在VC ++ 2003中,我可以将源文件保存为UTF-8,并且所有string均按原样使用。 换句话说,下面的代码将原样打印到控制台。 如果源文件保存为UTF-8,那么输出将是UTF-8。 printf("Chinese (Traditional)"); printf("中国語 (繁体)"); printf("중국어 (번체)"); printf("Chinês (Tradicional)"); 我用UTF-8 BOM保存了UTF-8格式的文件。 但是使用VC2008编译的结果是: warning C4566: character represented by universal-character-name '\uC911' cannot be represented in the current code page (932) warning C4566: character represented by universal-character-name '\uAD6D' cannot be represented in the current code page (932) etc. 导致这些警告的字符已损坏。 符合语言环境(在这种情况下,932 =日语)的转换为语言环境编码,即Shift-JIS。 我找不到一个方法让VC ++ 2008为我编译这个。 […]

安置新的和删除

什么是正确的方法来删除这里分配的所有内存? const char* charString = "Hello, World"; void *mem = ::operator new(sizeof(Buffer) + strlen(charString) + 1); Buffer* buf = new(mem) Buffer(strlen(charString)); delete (char*)buf; 要么 const char* charString = "Hello, World"; void *mem = ::operator new(sizeof(Buffer) + strlen(charString) + 1); Buffer* buf = new(mem) Buffer(strlen(charString)); delete buf; 或者他们都是一样的?

std :: to_string – 重载函数的实例超过参数列表

counter是一个int void SentryManager::add(std::string name,std::shared_ptr<Sentry>){ name = name + std::to_string(counter); } 什么是阻止这个错误的最好方法? 当我懒惰的时候,我只是把这个东西做了long long的long long ,但我相信有一个更好的解决方法。 错误信息: sentrymanager.cpp(8): error C2668: 'std::to_string' : ambiguous call to overloaded function 我正在使用Visual C ++ 2010 Express。

MSVC ++ variadicmacros扩展

所以我有一个在GCC中很好用的macros,但是在微软的C ++编译器中没有。 我希望有人可能知道一个解决方法,或者可以向我解释为什么这样做。 我相信这个macros并不完全是“标准的”,但它确实会帮助我。 这是macros的一个function性的例子: #define VA_NARGS_IMPL(_1, _2, _3, _4, _5, N, …) N #define VA_NARGS(…) VA_NARGS_IMPL(__VA_ARGS__, 5, 4, 3, 2, 1) #define FULLY_EXPANDED(count, …) \ MAC ## count (__VA_ARGS__) #define SEMI_EXPANDED(count, …) FULLY_EXPANDED(count, __VA_ARGS__) #define EXPAND_THESE(…) SEMI_EXPANDED(VA_NARGS(__VA_ARGS__), __VA_ARGS__) #define ACTUAL_MACRO(x) parent->GetProperty<x>(); #define MAC1(a) ACTUAL_MACRO(a) #define MAC2(a,b) MAC1(a) ACTUAL_MACRO(b) #define MAC3(a,b,c) MAC2(a,b) ACTUAL_MACRO(c) #define MAC4(a,b,c,d) […]

为什么Visual Studio 2010无法find/打开PDB文件?

我正在尝试在VS 2010中使用OpenCV。我是一名业余爱好者,正在学习OpenCV wiki的第一步。 但是,当试图debugging我的项目,我得到以下错误: 'C:\ Windows \ SysWOW64 \ ntdll.dll',无法find或打开PDB文件'C:\ Windows \ SysWOW64 \ kernel32.dll',无法find或打开PDB文件'C:\ Windows \ SysWOW64 \ kernellbase。 dll',无法find或打开PDB文件 我在正确的目录中有这些文件,为什么不能打开它们? 我该怎么办才能解决这个问题?