【问题标题】:stl vector of vectors conversion from double to unsigned intstl 向量从 double 到 unsigned int 的转换
【发布时间】:2014-05-13 15:07:42
【问题描述】:

我正在尝试使用 STL 模板类向量声明一个向量向量,但我不知道我做错了什么。

int K = 4;
int clusterSize = 45;    
vector<vector<double> > clusters(K+1,vector<double>(clusterSize));

它抛出了这个错误:

warning C4244: 'argument' : conversion from 'double' to 'unsigned int', possible loss of data   

我做错了什么?

谢谢!

【问题讨论】:

  • 我在使用-Wall -Wextra -pedantic 的 g++ 4.8.1 中没有收到任何错误或警告。
  • “它给我抛出了这个错误:warning C4244: ...” 然后再次阅读该消息,这是一个警告。
  • 一切都被宣布为正确。你确定警告是针对这条线的吗?警告不是错误。它可以工作。
  • 呈现的代码看起来不错。您能否将此代码包装在同样显示此警告的main() 函数中?我这样做的尝试没有收到任何警告:ideone.com/HvcnAK
  • 在 VS2013 或 GCC 4.7.2 下没有错误。您使用的是哪个编译器?您确定错误与您提供的代码块有关吗?

标签: c++ templates vector stl double


【解决方案1】:

使用基于 Clang 3.1 的 Windows 64 位编译器 C++Builder XE3 编译时,会出现两个警告,但说明相同的信息:implicit conversion changes signedness: 'int' to 'size_type' (aka 'unsigned long long')。警告位于clusters 声明中的K+1clusterSize 位置。

无论使用什么编译器,都试图传达关于如何使用int 而不是size_type 的类似信息。查看这个出色的矢量参​​考以了解更多构造函数详细信息:std::vector::vector

【讨论】:

  • 非常感谢,我想投票赞成你的答案,但我是新手哈哈;)。正如我在 cmets 上所说的,我把这个答案放在这里只是为了理解基础代码。谢谢你给我这些信息。我正在查看参考构造函数,但找不到它。
  • @joscormir 欢迎您。标准库 (SL) 容器中有很多构造函数。有些采用size_type 参数,有些则不采用。我还没有找到一个接受int 的 SL 容器构造函数。 cppreference 网站是一个极好的资源。
猜你喜欢
  • 1970-01-01
  • 2011-09-17
  • 1970-01-01
  • 1970-01-01
  • 2014-04-05
  • 2013-09-03
  • 2012-04-28
  • 2021-01-02
  • 1970-01-01
相关资源
最近更新 更多