Questions tagged «c++»

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

13
启动失败。找不到二进制文件。Eclipse Helios上的CDT
我在Ubuntu 10.04上使用Eclipse Helios,并且尝试在其上安装CDT插件。我从这里下载它这里。 然后我转到“安装新软件”并选择zip文件(我没有解压缩它,只需选择zip文件)。好的,它可以安装,一切正常,它显示了可选功能,等等等等。 然后创建一个新的HelloWorld项目。当我尝试运行它时,它显示一个错误并说: 启动失败。找不到二进制文件。 谁能解释我该如何解决? 谢谢。


29
我应该避免哪些C ++陷阱?[关闭]
在这里很难说出要问什么。这个问题是模棱两可,含糊,不完整,过于宽泛或夸张的,因此不能以目前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 9年前关闭。 我记得第一次学习STL中的向量,过了一段时间,我想为我的一个项目使用布尔向量。在看到一些奇怪的行为并进行了一些研究之后,我了解到bool的向量实际上并不是bool的向量。 在C ++中还有其他需要避免的常见陷阱吗?
74 c++  stl 

6
如何确保类的每个方法都首先调用其他方法?
我有 : class Foo { public: void log() { } void a() { log(); } void b() { log(); } }; 有没有一种方法可以让我使用Foo调用的每个方法log(),而无需显式键入log()作为每个函数的第一行?我想这样做,这样我就可以向每个函数添加行为而不必遍历每个函数并确保进行了调用,并且还可以在添加新函数时自动添加代码... 这有可能吗?我无法想象如何使用宏执行此操作,因此不确定从哪里开始...到目前为止,我唯一想到的方法是添加“预构建步骤”,以便在编译之前扫描文件并编辑源代码,但这似乎并不明智。 编辑:只是为了澄清-我不希望log()明显地调用自己。它不需要成为课程的一部分。 编辑:我更喜欢使用跨平台工作的方法,并且仅使用stl。
74 c++  c++11 

4
C ++编译错误?
我有以下代码: #include <iostream> #include <complex> using namespace std; int main() { complex<int> delta; complex<int> mc[4] = {0}; for(int di = 0; di < 4; di++, delta = mc[di]) { cout << di << endl; } return 0; } 我希望它输出“ 0、1、2、3”并停止,但输出的序列是“ 0、1、2、3、4、5,..”。 看起来比较di<4效果不佳,并且总是返回true。 如果我只是将其注释掉,delta=mc[di],我会像往常一样得到“ 0,1,2,3”。无辜的任务有什么问题? 我正在使用带有-O2选项的Ideone.com g ++ C ++ 14。

3
在Qt,QtCreator和QMake中配置GCC编译器开关
我最近尝试在Windows 7(64位)上使用Qt Creator 1.3.2,Qt 4.6.2和GCC 4.4.0(32位版本)来使用一些实验性的C ++ 0x扩展和遇到以下(致命)错误: 该文件需要编译器和库支持即将推出的ISO C ++标准C ++ 0x。该支持目前处于试验阶段,必须使用-std = c ++ 0x或-std = gnu ++ 0x编译器选项启用。 在寻找解决方案时,我遇到了线程qmake和编译器标志?,并将以下内容添加到.pro文件中: CXXFLAGS += -std=c++0x 但这似乎没有什么不同。 因此,我希望有一些标签需要添加到.pro(项目)文件中,但是我以前从未对Qt,QMake和QtCreator中的GCC编译器开关感到困惑,并且我不确定正确的调用/咒语。因此,我的问题是在使用QtCreator,QMake和Qt时如何设置GCC编译器开关?
74 c++  qt  c++11  qt-creator 

13
如何将单元测试引入大型的(C / C ++)代码库中?
我们有一个大型的,用C语言编写的多平台应用程序(使用的C ++数量很少,但数量在不断增长)。随着多年来的发展,它具有许多您希望在大型C / C ++应用程序中使用的功能: #ifdef 地狱 大文件使得难以隔离可测试代码 功能太复杂而无法轻松测试 由于此代码是针对嵌入式设备的,因此在实际目标上运行它会产生大量开销。因此,我们希望在本地系统上快速完成更多的开发和测试。但是,我们希望避免采用经典策略“将文件复制/粘贴到系统上的.c文件中,修复错误,然后复制/粘贴回”。如果开发人员要麻烦这样做,我们希望以后能够重新创建相同的测试,并以自动化的方式运行。 这是我们的问题:为了将代码重构为更具模块化,我们需要使其更具可测试性。但是,为了引入自动化的单元测试,我们需要使其更具模块化。 一个问题是,由于我们的文件太大,因此我们可能在文件中包含一个函数,该函数在同一文件中调用一个函数,因此需要对它进行存根以进行良好的单元测试。随着我们的代码变得更加模块化,似乎这将不再是问题,但这还有很长的路要走。 我们考虑做的一件事是用注释标记“已知是可测试的”源代码。然后,我们可以编写脚本扫描源文件以获取可测试的代码,将其编译为单独的文件,然后将其与单元测试链接。我们可以在修复缺陷和添加更多功能时慢慢介绍单元测试。 但是,令人担忧的是,维护此方案(以及所有必需的桩函数)将变得很麻烦,并且开发人员将停止维护单元测试。因此,另一种方法是使用一种工具,该工具会自动为所有代码生成存根,并将其与文件链接。(我们发现唯一可以执行此操作的工具是昂贵的商业产品),但是这种方法似乎要求我们所有的代码在开始之前都必须更加模块化,因为只能进行外部调用。 就个人而言,我希望开发人员考虑其外部依赖关系并智能地编写自己的存根。但是,如果将所有依赖项存根为一个严重过度增长的10,000行文件,可能会不堪重负。可能很难说服开发人员他们需要维护所有外部依赖项的存根,但这是正确的方法吗?(我听到的另一个论点是子系统的维护者应维护其子系统的存根。但是我想知道是否“强迫”开发人员编写自己的存根会导致更好的单元测试?) 的#ifdefs,当然,再添全尺寸的问题。 我们已经研究了几种基于C / C ++的单元测试框架,并且有很多看起来不错的选项。但是我们还没有发现任何简化从“没有单元测试的代码圈”到“可单元测试的代码”的过渡的方法。 因此,这是我对遇到过此问题的其他人的疑问: 一个好的起点是什么?我们是朝着正确的方向前进,还是缺少明显的东西? 哪些工具可能有助于过渡?(最好是免费/开源,因为我们目前的预算大约为“零”) 注意,我们的构建环境是基于Linux / UNIX的,因此我们不能使用任何仅Windows的工具。
74 c++  c  unit-testing  unix  legacy 

5
获取经过的时间Qt
我正在寻找等效的Qt GetTickCount() 可以让我测量一段代码运行所需时间的方法如下: uint start = GetTickCount(); // do something.. uint timeItTook = GetTickCount() - start; 有什么建议?
74 c++  qt 


11
嵌入式C ++:是否使用STL?
我一直是嵌入式软件工程师,但通常在OSI堆栈的第3层或第2层。我不是一个真正的硬件专家。我通常总是做电信产品,通常是手提电话/手机,这通常意味着类似ARM 7处理器的东西。 现在,我发现自己处于一个更通用的嵌入式世界中,这是一个小型初创公司,在那儿我可能会转向“功能不那么强大”的处理器(有主观知识)-我无法预测哪个。 我已经读了很多有关在嵌入式系统中的C ++中使用STL的争论,并且没有明确的答案。有一些关于可移植性的小问题,还有一些关于代码大小或运行时的问题,但是我有两个主要的担忧: 1-异常处理;我仍然不确定是否要使用它(请参阅嵌入式C ++:是否使用异常?) 2-由于嵌入式系统可能带来的问题,我非常不喜欢嵌入式系统中的动态内存分配。我通常有一个缓冲池,该缓冲池在编译时静态分配,并且仅提供固定大小的缓冲区(如果没有缓冲区,则系统复位)。STL当然会进行很多动态分配。 现在,我必须决定是整个公司永远使用还是放弃STL(它涉及一些非常核心的软件)。 我跳哪条路?超级安全并丢失了构成C ++的大部分内容(imo,不仅是语言定义),而且以后可能会遇到问题,还是不得不添加大量异常处理以及现在可能还有其他一些代码? 我很想只使用Boost,但是1)我不确定它是否可以移植到我可能要使用的每个嵌入式处理器上,以及2)在他们的网站上,他们说他们不保证/不推荐它的某些部分。用于嵌入式系统(尤其是FSM,这似乎很奇怪)。如果我去助推器&以后我们发现问题....
74 c++  stl  embedded 

2
C ++ 11:为什么std :: condition_variable使用std :: unique_lock?
std::unique_lock与一起工作时的角色使我有些困惑std::condition_variable。据我了解的文档,std::unique_lock它基本上是一个ated肿的锁卫士,可以在两个锁之间交换状态。 到目前为止,我已经pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)为此目的使用过(我猜这就是STL在posix上使用的功能)。它需要一个互斥锁,而不是锁。 这有什么区别?是std::condition_variable处理std::unique_lock优化的事实吗?如果是这样,它到底有多快?


8
找不到Cygwin Make bash命令
我将cygwin与所有软件包安装在Windows 7 64位上。由于某种原因,make命令给我一个错误:bash make:命令未找到。我检查了一下,在我的bin文件夹中没有make.exe。谁可以帮我这个事?我真的需要在CYGWIN工作。我不想去Windows XP。
74 c++  makefile  cygwin  command 

11
使用“自动”类型推导-如何找出编译器推导的类型?
我如何找出使用auto关键字时编译器推断出的类型? 示例1:更简单 auto tickTime = 0.001; 是推导为afloat还是adouble? 示例2:更复杂(和我目前的头痛): typedef std::ratio<1, 1> sec; std::chrono::duration<double, sec > timePerTick2{0.001}; auto nextTickTime = std::chrono::high_resolution_clock::now() + timePerTick2; 什么类型的nextTickTime? 我遇到的问题是尝试发送nextTickTime给时std::cout。我收到以下错误: ./main.cpp: In function ‘int main(int, char**)’: ./main.cpp:143:16: error: cannot bind ‘std::basic_ostream<char>’ lvalue to ‘std::basic_ostream<char>&&’ std::cout << std::setprecision(12) << nextTickTime << std::endl; // time in seconds ^ …
74 c++  c++11  auto  chrono 

11
C / C ++中的固定长度数据类型
我听说诸如数据类型的大小int可能因平台而异。 我的第一个问题是:有人可以举个例子吗,当程序假设anint是4个字节,但是在另一个平台上却是2个字节时,出了什么问题? 我遇到的另一个问题是相关的。我知道人们可以通过某些方法来解决此问题typedefs,例如,您拥有像u8,,-这样的变量,无论使用什么平台u16,u32该变量都保证是8bit,16bit,32bits-我的问题是,通常如何实现?(我不是指stdint库中的类型-我是很好奇的手动工具,无论平台如何,一个类型如何总是说32位?)
74 c++  c 

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.