Questions tagged «c++»

C ++是一种通用编程语言。它最初被设计为C的扩展,并且具有类似的语法,但是现在它是一种完全不同的语言。使用此标记可解决有关将要使用C ++编译器编译的代码的问题。对于与特定标准修订版[C ++ 11],[C ++ 14],[C ++ 17]或[C ++ 20]等相关的问题,请使用特定于版本的标记。


6
项目错误:QT中的未知模块:webkitwidgets
我正在将代码从qt4移植到qt5。根据建议,我在.pro文件中添加了以下行: QT += webkitwidgets 但是,当我运行时qmake,出现以下错误: Project ERROR: Unknown module(s) in QT: webkitwidgets 我正在Ubuntu 12.04 LTS上进行开发,并按所述安装了Qt 。
76 c++  qt  qt5  qtwebkit 

13
通过下标获取一个最后一个数组元素的地址:是否符合C ++标准?
我已经看到它多次断言C ++标准不允许以下代码: int array[5]; int *array_begin = &array[0]; int *array_end = &array[5]; 是&array[5]合法的C ++代码,在这种情况下? 如果可能的话,我想参考标准的答案。 知道它是否符合C标准也很有趣。如果不是标准的C ++,为什么要决定将其与array + 5or区别对待&array[4] + 1?

12
如何传递类成员函数作为回调?
我使用的API要求我将函数指针作为回调传递。我正在尝试从我的课程中使用此API,但遇到编译错误。 这是我从构造函数执行的操作: m_cRedundencyManager->Init(this->RedundencyManagerCallBack); 无法编译-我收到以下错误: 错误8错误C3867:'CLoggersInfra :: RedundencyManagerCallBack':函数调用缺少参数列表;使用'&CLoggersInfra :: RedundencyManagerCallBack'创建指向成员的指针 我尝试过使用建议&CLoggersInfra::RedundencyManagerCallBack-对我不起作用。 任何建议/解释吗? 我正在使用VS2008。 谢谢!!

10
空隙的大小是多少?
这句话会产生什么? void *p = malloc(sizeof(void)); 编辑:问题的扩展。 如果sizeof(void)在GCC编译器中产生1,则分配1字节的内存,指针p指向该字节,p ++是否会递增为0x2346?假设p为0x2345。我说的是p,而不是* p。

4
错误LNK2005:MSVCRT.lib(MSVCR100.dll)中已定义的xxx C:\ something \ LIBCMT.lib(setlocal.obj)
我正在使用DCMTK库读取Dicom文件(医学图像处理中使用的图像格式。)在编译此DCMTK源代码时遇到问题。DCMTK使用其他一些外部库(zlib,tiff,libpng,libxml2,libiconv)。我知道所有库都应使用相同的代码生成选项来生成。 我已经下载了这些支持库的编译版本,这些支持库是使用“多线程DLL”运行时选项(/ MD)编译的。在DCMTK源代码的每个项目中,我确保运行时选项为“多线程DLL”(/ MD)。但是仍然出现这些错误: Error 238 error LNK2005: ___iob_func already defined in MSVCRT.lib(MSVCR100.dll) C:\dcmtk-3.5.4-src\CMakeBinaries\dcmpstat\apps\LIBCMT.lib(_file.obj) dcmp2pgm Error 239 error LNK2005: __lock_file already defined in MSVCRT.lib(MSVCR100.dll) C:\dcmtk-3.5.4-src\CMakeBinaries\dcmpstat\apps\LIBCMT.lib(_file.obj) dcmp2pgm Error 240 error LNK2005: __unlock_file already defined in MSVCRT.lib(MSVCR100.dll) C:\dcmtk-3.5.4-src\CMakeBinaries\dcmpstat\apps\LIBCMT.lib(_file.obj) dcmp2pgm Error 241 error LNK2005: __initterm_e already defined in MSVCRT.lib(MSVCR100.dll) C:\dcmtk-3.5.4-src\CMakeBinaries\dcmpstat\apps\LIBCMT.lib(crt0dat.obj) dcmp2pgm Error 242 …

1
如何通过成员函数使用Boost绑定
以下代码导致cl.exe崩溃(MS VS2005)。 我正在尝试使用boost绑定来创建函数来调用myclass的方法: #include "stdafx.h" #include <boost/function.hpp> #include <boost/bind.hpp> #include <functional> class myclass { public: void fun1() { printf("fun1()\n"); } void fun2(int i) { printf("fun2(%d)\n", i); } void testit() { boost::function<void ()> f1( boost::bind( &myclass::fun1, this ) ); boost::function<void (int)> f2( boost::bind( &myclass::fun2, this ) ); //fails f1(); f2(111); } …

5
虚拟析构函数是否被继承?
如果我有一个带有虚拟析构函数的基类。是否也有派生类声明虚拟析构函数? class base { public: virtual ~base () {} }; class derived : base { public: virtual ~derived () {} // 1) ~derived () {} // 2) }; 具体问题: 1)和2)是否相同?2)是因为其基础而自动虚拟还是“停止”了虚拟性? 如果无关的派生析构函数可以省略吗? 声明派生的析构函数的最佳实践是什么?声明它是虚拟的,非虚拟的还是尽可能省略它?

3
为什么有时不需要在lambda中捕获const变量?
考虑以下示例: #include <cstdlib> int main() { const int m = 42; [] { m; }(); // OK const int n = std::rand(); [] { n; }(); // error: 'n' is not captured } 为什么我需要n在第二个Lambda中捕获而不是m在第一个Lambda中捕获?我检查了C ++ 14标准中的5.1.2节(Lambda表达式),但找不到原因。您能指出我对此段的解释吗? 更新:我在GCC 6.3.1和7(主干)中都观察到了此行为。在这两种情况下(variable 'm' cannot be implicitly captured in a lambda with no capture-default specified),Clang …


4
冒泡排序中的> vs.> =会导致明显的性能差异
我偶然发现了一些东西。起初,我认为可能是这种情况下分支错误预测的情况,但是我无法解释为什么分支错误预测会导致这种行为。 我用Java实现了两个版本的Bubble Sort,并进行了一些性能测试: import java.util.Random; public class BubbleSortAnnomaly { public static void main(String... args) { final int ARRAY_SIZE = Integer.parseInt(args[0]); final int LIMIT = Integer.parseInt(args[1]); final int RUNS = Integer.parseInt(args[2]); int[] a = new int[ARRAY_SIZE]; int[] b = new int[ARRAY_SIZE]; Random r = new Random(); for (int run = 0; …

5
用于C ++持续集成的buildbot vs hudson / jenkins
我目前正在使用jenkins / hudson进行大型C ++项目的持续集成。我们为干线和每个分支都有单独的项目。此外,还有一些与Java代码相关的项目,但是这些项目的设置目前还很基本(不过我们稍后可能会做更多)。C ++项目执行以下操作: 使用是否重新配置,执行全新构建或使用全新签出的选项构建所有内容 (可选)构建并运行所有测试 (可选)使用Valgrind的memcheck运行所有测试 运行cppcheck 生成doxygen文档 发布报告:单元测试,valgrind,cppcheck,编译器警告,SLOC,打开的任务和代码覆盖率(使用gcov,gcovr和cobertura插件) 每晚或按需将代码部署到测试环境和软件包存储库 一切都可配置为自动构建,可选为按需构建。在下面,有一个bash脚本来控制其中的大部分内容,而这又取决于我们的构建系统,该构建系统使用automake和autoconf以及自定义bash脚本。 我们当时开始使用Hudson,因为那是Java伙计们正在使用的东西,而我们只想每晚进行构建。从那时起,我们增加了很多,并继续增加。从某些方面来说,哈德森很棒,但当然不是理想的。 我看过其他解决方案,唯一看起来可以替代的解决方案是buildbot。对于这种情况,buildbot会更好吗?因为我们已经在使用Hudson,所以投资值得吗?为什么? 编辑:有人问为什么我还没有发现哈德森/詹金斯是理想的。简短的答案是,一切都可以改善。我只是想知道Jenkins是否是针对我的用例的最佳最新解决方案,或者是否存在更好的东西(buildbot?),即使出现了新的需求,从长远来看,它也更容易维护。

11
使用堆内存(malloc / new)是否会创建不确定的程序?
几个月前,我开始用C语言开发用于实时系统的软件,用于空间应用程序以及具有C ++的微控制器。在这样的系统中有一个经验法则:永远不要创建堆对象(因此不要创建malloc / new),因为它会使程序变得不确定。当人们告诉我时,我无法验证这句话的正确性。那么,这是正确的说法吗? 对我来说,困惑是,据我所知,确定性意味着两次运行程序将导致精确,相同的执行路径。据我了解,这是多线程系统的一个问题,因为多次运行相同的程序可能会使不同的线程每次以不同的顺序运行。

10
在C ++中的类初始化程序中初始化const数组
我在C ++中有以下课程: class a { const int b[2]; // other stuff follows // and here's the constructor a(void); } 问题是,鉴于b不能在构造函数的函数体内进行初始化,我如何在初始化列表中初始化b const? 这不起作用: a::a(void) : b([2,3]) { // other initialization stuff } 编辑:恰当的例子是当我可以b为不同的实例使用不同的值时,但已知这些值在实例的生存期内是恒定的。

5
为什么官方的Qt示例和教程不使用智能指针?
为什么有关Qt库的官方示例和教程从不使用智能指针?我只看到new和delete用于创建和销毁小部件。 我搜索了基本原理,但找不到它,除非是出于历史原因或向后兼容,否则我自己也看不到:不是每个人都希望程序在小部件构造函数失败时终止,并通过try / catch处理它块是丑陋的(即使在很少的地方使用)。父母小部件可能拥有孩子的所有权这一事实也仅向我部分解释了这一点,因为您仍必须delete在某种程度上为父母使用。
76 c++  qt  c++11 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.