如果我有一个类定义类似 class A { protected: ~A(){ } }; 那么我可以dynamic地分配个人以及对象的数组 A* ptr1 = new A; A* ptr2 = new A[10]; 但是,当我定义这个类的构造函数 class A { public: A(){} protected: ~A(){ } }; 那么我可以创build个人对象 A* ptr = new A; 但是当我尝试dynamic分配对象的数组 A* ptr = new A[10]; 编译器(gcc-5.1和Visual Studio 2015)开始抱怨A ::〜A()是不可访问的。 任何人都可以解释一下: 1-为什么在构造函数被定义和未定义的行为的差异。 2-当构造函数被定义为什么我被允许创build单个对象而不是对象数组。
我知道这已经被问到在其他地方和答案,但我有MS Visual Studio 2010的问题。我已经开发了一个C ++可执行文件,但如果我运行版本的机器,没有VC ++运行时库(即,msvcr100d.dll),我得到“程序无法启动,因为msvcr100d.dll从您的计算机丢失”错误。 这很奇怪,原因有两个: 为什么它试图与可再发行的debugging版本链接? 我尝试应用此修复程序 ,将运行时库设置设置为/ MT而不是/ MD(multithreadingDLL),但这只会使问题变得更糟(如果手动复制msvcr100d.dll,则表示无法findmsvcp110 .DLL)。 如何将运行时库与我的可执行文件打包,以便可以在没有安装MS VC 2010或可再发行的计算机上运行它? 我知道包含DLL副本的安全风险被认为是一种安全风险,因为它不会被更新,但是我的目标是在短期内将这个可执行文件发送给几个朋友。
我正在开始一个新的BREW项目,并且希望使用Warning Level 4(/ W4)进行编译,以保持应用程序代码的清洁和干净。 问题是BREW头本身不能干净地用/ W4编译。 在gcc中,可以通过使用-I和-isystem区分应用程序和系统标头,然后默认gcc不会在系统标头中报告任何编译警告。 在Visual C ++中是否有等价的机制?
我有C ++的经验,但不是MSVC。 我正在做的是将一个来自开源项目的.dlljoin到我的项目中。 代码是可用的,我已经build立了它。 我有.DLL以及.LIB,据我所知它是C ++项目所必需的。 现在不幸的是,没有简单的“添加引用”,将我的.dll放入一个包含目录,并将其添加到我的解决scheme。 我编辑了项目属性页面,C / C ++附加包含目录选项以及添加.lib作为附加的链接器依赖项。 我在我的解决scheme树中创build了一个包含dll和lib的目录。 我的问题是,当我尝试从文档包含头文件,VS输出吐出错误信息。 现在我意识到我正在使用dll / lib组合,并且.h文件不存在于我的解决scheme中,所以如何添加正确的包含? 我正在使用QT工具包,也正在工作,但我怎么从开放源码库添加其他头/ DLL逃避我。 有人可以请指点我正确的方向。
出于某种原因,我需要暂时禁用头文件中的一些macros, #undef MACRONAME undef #undef MACRONAME将使代码编译,但它将#undef MACRONAME现有的macros。 有没有办法只是禁用它? 我应该提到你并不知道macros的值,而且我正在寻找一个交叉编译器解决scheme(至less应该在GCC和MSVC中工作)。
什么是堆栈alignment? 为什么使用? 它可以通过编译器设置来控制吗? 这个问题的细节是从尝试使用msfc使用ffmpeg库时面临的一个问题,但是我真正感兴趣的是解释什么是“堆栈alignment”。 细节: 当运行我的msvc complied程序链接到avcodec我得到以下错误:“编译器没有alignment堆栈variables。libavcodec已被编译错误”,其次是在avcodec.dll崩溃。 avcodec.dll没有编译与msvc,所以我无法看到里面发生了什么。 当运行ffmpeg.exe和使用相同的avcodec.dll一切正常。 ffmpeg.exe没有用msvc编译,它被编译为gcc / mingw(与avcodec.dll相同) 谢谢, 担
我有一个学生的vector字段的名称。 我想遍历vector。 void print(const vector<Student>& students) { vector<Student>::iterator it; for(it = students.begin(); it < students.end(); it++) { cout << it->name << endl; } } 这在C ++中显然是非法的。 请帮忙。
如何将一个CString对象转换为MFC中的整数。
我正在使用Boost.PythonembeddedPython解释器的应用程序。 这用于运行与主程序交互的用户生成的“脚本”。 不幸的是,一个用户在运行脚本时报告运行时错误R6034。 主程序启动正常,但我认为这个问题可能在python27.dll加载时发生。 我正在使用Visual Studio 2005,Python 2.7和Boost.Python 1.46.1。 这个问题只发生在一个用户的机器上。 我之前已经处理了明显的问题,并设法解决它们,但是在这种情况下,我有点不知所措。 有没有其他人遇到类似的问题? 你能解决吗? 怎么样? 非常感谢你的帮助!
C#项目中的文件有“ 复制到输出目录”属性。 但在VC + +项目中是缺席的。 我知道,我可以在VC ++中使用构build事件 ,并写在那里 xcopy /y /d %(FullPath) $(OutDir) 有没有办法避免使用CMD(和其他脚本方法)? 在这种情况下,msbuild能做些什么来帮助吗?