javascript

java

python

c#

node.js

android

reactjs

c++

php

jquery

html

css

git

ruby-on-rails

.net

ios

sql

c

string

ruby

C ++-QtCreator:找不到有效的工具包

仅在Windows 7上安装了IDE。我想创建一个Plain C ++项目(Non-QT项目)。 但是我得到一个错误:找不到有效的工具包。 当我单击“选项”->“工具包”时,我看到了桌面(默认)工具包,它没有显示任何错误。

是否由于未安装Qt库而收到错误消息? 如果是这样,有什么办法可以绕过下载/安装而仅使用IDE?

trans by 2019-10-16T00:49:31Z

c ++-/usr/lib/x86_64-linux-gnu/libstdc++.so.6:找不到版本CXXABI_1.3.8'

我最近寻求帮助[https://stackoverflow.com/questions/20253515/no-idea-as-to-usr-lib-x86-64-linux-gnu-libstdc-so-6-version-cxxabi-1- 3-8],它被否决并关闭(我不知道为什么)

事实证明,“ make install”-安装的make目标并暗示目标“ install-target-libstdc ++ v3”实际上并不意味着您已经准备就绪。

我一直想知道自己在做什么错了,因为我以为这样的make target可以帮到我。

我希望这个答案至少可以帮助其他人。

trans by 2019-10-15T21:03:52Z

如何将协变返回类型与智能指针一起使用?

我有这样的代码:

class RetInterface {...}

class Ret1: public RetInterface {...}

class AInterface
{
  public:
     virtual boost::shared_ptr<RetInterface> get_r() const = 0;
     ...
};

class A1: public AInterface
{
  public:
     boost::shared_ptr<Ret1> get_r() const {...}
     ...
};

此代码无法编译。

在Visual Studio中,它引发了

C2555:覆盖虚拟函数的返回类型不同并且不是   协变

如果我不使用boost::shared_ptr而返回原始指针,则代码会编译(我理解这是由于C ++中的协变返回类型所致)。 我可以看到问题是因为Ret1boost::shared_ptr不是来自RetInterfaceboost::shared_ptr。但是我想返回Ret1boost::shared_ptr以用于其他类,否则我必须在返回后强制转换返回的值。

  1. 难道我做错了什么?
  2. 如果不是,为什么这样的语言-在这种情况下,应该可以扩展以处理智能指针之间的转换? 有理想的解决方法吗?
trans by 2019-10-15T20:50:10Z

c ++-1D或2D数组,更快些?

我需要表示一个2D字段(轴x,y),并且遇到一个问题:我应该使用一维数组还是二维数组?

我可以想象,重新计算1D数组(y + x * n)的索引可能比使用2D数组(x,y)慢,但是我可以想象1D可能在CPU缓存中。

我做了一些谷歌搜索,但只找到了有关静态数组的页面(并指出1D和2D基本相同)。 但是我的数组必须动态。

有啥

  1. 快点,
  2. 较小(RAM)

动态一维数组还是动态二维数组?

谢谢 :)

trans by 2019-10-15T20:33:23Z

c ++-警告C4003并在以下位置显示错误C2589和C2059:x = std :: numeric_limits <int> :: max();

这行代码在一个小型测试程序中可以正常工作,但是在我想要的程序中,我收到以下编译器投诉:

#include <limits>

x = std::numeric_limits<int>::max();

c:\...\x.cpp(192) : warning C4003: not enough actual parameters for macro 'max'
c:\...\x.cpp(192) : error C2589: '(' : illegal token on right side of '::'
c:\...\x.cpp(192) : error C2059: syntax error : '::'

我得到相同的结果:

#include <limits>
using namespace std;

x = numeric_limits<int>::max();

为什么将max视为宏max(a,b);?

trans by 2019-10-15T20:24:50Z

C ++中的静态变量

我想知道头文件中的静态变量与类中声明的静态变量之间的区别是什么。 在头文件中声明静态变量时,其范围限于.h文件或所有单元。 同样,在类中声明静态变量时,通常会在.cpp文件中初始化静态变量吗? 那是否意味着静态变量范围限制为2个编译单元?

trans by 2019-10-15T18:35:23Z

时间是什么时候uint8_t≠unsigned char?

根据C和C ++,CHAR_BIT >= 8
但是无论何时uint8_tunsigned char甚至都不能表示为8位。
它必须更大,因为CHAR_BIT是系统上任何数据类型的最小位数。

uint8_t上可以合法定义为哪种类型的系统,而不是unsigned char

(如果C和C ++的答案不同,那么我想两者都知道。)

trans by 2019-10-15T13:53:21Z

为什么32位整数使用32次以上时,左移位“ <<”不按预期工作?

当我编写以下程序并使用GNU C ++编译器时,输出为1,我认为这是由于编译器执行的旋转操作所致。

#include <iostream>

int main()
{
    int a = 1;
    std::cout << (a << 32) << std::endl;

    return 0;
}

但是从逻辑上讲,正如人们所说的,如果这些位溢出位宽会丢失,则输出应为0。这是怎么回事?

该代码位于ideone上,[http://ideone.com/VPTwj。]

trans by 2019-10-15T12:55:40Z

C ++-size_t总是未签名吗?

如标题所示:size_t是否始终未签名,即size_t x是否为x始终为>= 0

trans by 2019-10-15T07:28:19Z

在多线程C ++ 11程序中未处理异常时会发生什么?

如果我有一个C ++ 11程序运行两个线程,并且其中一个抛出未处理的异常,会发生什么? 整个程序会火死吗? 引发异常的线程是否会单独死亡(如果是,在这种情况下我可以获取异常)吗? 还有其他东西吗?

trans by 2019-10-15T06:49:27Z

C ++-Visual Studio项目中的ipch文件

我在我的项目中找到一个ipch文件夹,其文件具有ipch扩展名。 另外,它们非常庞大。

我可以摆脱它们吗?

trans by 2019-10-15T06:38:42Z

如何使变量始终等于某些计算的结果?

在数学上,如果z = x+y/2,那么只要替换xy的值,z就会始终更改。我们可以在编程中做到这一点,而不必每次更改2569971503114748748933和y的值时都专门更新z吗?

我的意思是这样的东西行不通,对吧?

int x;
int y;
int z{x + y};
cin >> x;
cin >> y;
cout << z;

如果您对我为什么需要它感到困惑,我希望实时显示该变量,并在rhs变量进行更改时自动更新它。

就像杀死一只小怪并获得金币一样,净资产(现金+自己物品的价值)也会发生变化。 或者,汽车的速度计会根据您行驶的速度或速度而变化。

trans by 2019-10-15T06:12:49Z

c ++-C ++ 11:用std :: shared_ptr()替换所有非拥有的原始指针吗?

随着std::shared_ptr的问世,被粉刺的std::unique_ptr终于可以安息了。 因此,在过去的几天里,我一直在更改代码以使用智能指针,并从我的代码中删除所有std::shared_ptr

尽管valgrind表示我的代码是内存清理的,但是智能指针的语义丰富性将使代码更简洁,更易于理解。

在大多数代码中,翻译很简单:使用std::shared_ptr代替拥有对象持有的原始指针,扔掉std::unique_ptr,并根据需要仔细撒入std::shared_ptrstd::shared_ptrmove()调用,以与其余部分进行良好交互 编码。

我现在正在将非拥有的原始指针转换为智能指针。

由于我对对象的生命周期非常小心(我确保我的模块仅在一个方向上依赖),因此valgrind告诉我,我没有任何未初始化的读取,悬挂的指针或泄漏。 因此,从技术上讲,我现在可以不理会那些没有所有权的原始指针。

但是,一种选择是将那些非所有的原始指针更改为std::shared_ptr,因为我知道它们是非循环的。 或者,将它们保留为原始指针会更好吗?

我需要经验丰富的智能指针用户的一些建议,以便您决定使用哪种经验法则来决定是保持非所有权原始指针还是将其转换为std::shared_ptr,同时要牢记我不断进行单元测试和valgrind 我的代码。

编辑:我可能会误解std::shared_ptr的使用-它们可以与std::unique_ptr一起使用,还是如果我使用std::shared_ptr,所有手柄也应该是std::shared_ptr

trans by 2019-10-15T05:15:57Z

静态变量初始化

C ++保证编译单元(.cpp文件)中的变量按声明顺序进行初始化。 对于编译单元的数量,此规则分别适用于每个单元(我的意思是类之外的静态变量)。

但是,变量的初始化顺序在不同的编译单元之间是不确定的。

我在哪里可以看到有关gcc和MSVC的此顺序的一些解释(我知道依赖它是一个非常糟糕的主意-只是要了解在迁移到新的GCC专业版和不同的OS时,遗留代码可能存在的问题)?

trans by 2019-10-15T03:35:46Z

如何将std :: string写入UTF-8文本文件

我只想在C ++中向文本文件中写一些简单的行,但是我希望它们以UTF-8编码。 最简单的方法是什么?

trans by 2019-10-15T03:03:27Z

在Linux中获取主目录

我需要一种在Linux上运行的C ++程序中获取用户主目录的方法。 如果相同的代码可以在Unix上运行,那就太好了。 我不想使用HOME环境值。

AFAIK,根主目录是/ root。 如果我的程序是由root用户运行的,可以在该目录中创建一些文件/文件夹吗?

trans by 2019-10-15T01:58:16Z

C ++ 11:如何为函数添加别名?

如果我在名称空间栏中有一个Foo类:

namespace bar
{
    class Foo { ... }
};

然后,我可以:

using Baz = bar::Foo;

现在就像我在名称空间中用Baz定义了类。

是否可以对功能执行相同操作?

namespace bar
{
    void f();
}

然后:

using g = bar::f; // error: ‘f’ in namespace ‘bar’ does not name a type

什么是最干净的方法?

该解决方案也应适用于模板功能。

定义:如果某个实体B是A的别名,则与在源代码中(剥离的)生成的代码保持不变相比,如果A的任何或所有用法(当然不是声明或定义)在源代码中被B取代。 例如typedef A B是别名。 #define B A是别名(至少)。 T& B = A不是别名,B可以有效地实现为间接指针,而“非别名” A可以使用“立即语义”。

trans by 2019-10-15T01:38:44Z

c ++-Boost.Process在哪里?

我需要执行一个程序并在c ++中检索其stdout输出。 我也希望我的代码也可以跨平台。

最近发现了满足所有跨平台需求的Boost c ++库的奇妙世界,我想我只是去boost.org并阅读Boost.Process的文档。 令我惊讶的是,它不存在! 然后,我继续弄清楚Boost赋予其跨平台库以什么名字来启动外部进程,但是到目前为止还没有找到。

谷歌搜索将我带到了Julio M. Merino Vidal的Boost.Process,这似乎是我想要的非官方的Boost库。 奇怪的是,我似乎无法在该网站上找到下载链接。 似乎该项目还没有任何最新进展。

我终于能够在外部站点上找到Vidal的Boost.Process的下载链接,并且现在将使用该链接,但是我为使我的跨平台c ++库付出的努力感到非常惊讶。 与外部流程互动。

那么,为什么没有官方的Boost.Process? 看来这将是非常有价值的补充。 还是我完全忽略了这里明显的解决方案? 您是否可以建议其他跨平台库来管理外部流程的简单启动和交互?

trans by 2019-10-15T01:22:05Z

定制容器是否应具有免费的开始/结束功能?

创建按常规规则运行的自定义容器类时(即,使用STL算法,使用行为良好的通用代码等),在C ++ 03中,实现迭代器支持和成员begin / end函数就足够了。

C ++ 11引入了两个新概念-基于范围的循环和std :: begin / end。 基于范围的for循环可以理解成员的begin / end函数,因此任何C ++ 03容器都支持基于范围的for开箱即用。 对于算法,推荐的方法(根据Herb Sutter的“编写现代C ++代码”)是使用std :: begin而不是成员函数。

但是,在这一点上,我不得不问-建议的方法是调用完全限定的begin()函数(即std :: begin(c))还是依靠ADL并调用begin(c)?

在这种特殊情况下,ADL似乎毫无用处-因为如果可能的话,std :: begin(c)委托给c.begin(),通常的ADL好处似乎并不适用。 而且,如果每个人都开始依赖ADL,则所有自定义容器都必须在其必需的名称空间中实现额外的begin()/ end()自由函数。 但是,一些消息来源似乎暗示建议使用无限制的开始/结束调用(即[https://svn.boost.org/trac/boost/ticket/6357)。]

那么C ++ 11的方式是什么? 容器库作者应为类编写额外的begin / end函数,以在不使用命名空间std的情况下支持不合格的begin / end调用; 或使用std :: begin ;?

trans by 2019-10-14T19:10:29Z

如何将迭代器增加2?

有人可以告诉我如何将迭代器增加2吗?

iter++可用-我必须做iter+2吗? 我该如何实现?

trans by 2019-10-14T16:55:44Z

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 下一页 共109页