C++ <;我在哪里转换?>;警告C4244:';初始化';:从'__int64';至';int';,数据可能丢失

C++ <;我在哪里转换?>;警告C4244:';初始化';:从'__int64';至';int';,数据可能丢失,c++,C++,下面的代码在第174行中给出了以下警告: 警告C4244:“正在初始化”:从“\u int64”转换为“int”,可能会丢失数据 但我真的不明白为什么。我有\uu int64的向量s,但它的大小是整数,k也是整数,所以一切都应该是好的。或者可能k:s的工作原理与我想象的不同 #define _USE_MATH_DEFINES #include <iostream> #include <vector> #include <cmath> using name

下面的代码在第174行中给出了以下警告:

警告C4244:“正在初始化”:从“\u int64”转换为“int”,可能会丢失数据

但我真的不明白为什么。我有
\uu int64
的向量
s
,但它的大小是整数,
k
也是整数,所以一切都应该是好的。或者可能
k:s
的工作原理与我想象的不同

#define _USE_MATH_DEFINES

#include <iostream>
#include <vector>
#include <cmath>


using namespace std;

__int64 count( vector<__int64> s, int n )
{
    vector<__int64> table(n+1,0);   // or: 0LL instead 0
    table[0] = 1;                   // or: 1LL instead 1
    for ( int k : s )    /* 174 */  // or:  for ( auto& k : s )`
        for(int j=k; j<=n; ++j)
            table[j] += table[j-k];
     return table[n];
}


int main()
{
// some code here
    cin.get();
    return 0;
}
定义使用数学定义
#包括
#包括
#包括
使用名称空间std;
__int64计数(向量s,int n)
{
向量表(n+1,0);//或:0LL代替0
表[0]=1;//或:1LL而不是1
for(int k:s)/*174*///或:for(auto&k:s)`
for(int j=k;j
for(int k:s)
迭代
s
的所有元素,而
s
的模板类型是
\uu int64
,因此
k
的类型需要是
\uu int64

参见:

for(int k:s)
迭代
s
的所有元素,而
s
的模板类型是
\uu int64
,因此
k
的类型需要是
\uu int64


请参阅:

将(int k:s)的
更改为(auto&k:s)
,一切都会正常。

将(int k:s)的
更改为(auto&k:s)的
,一切都会好起来。

你用什么,它对你有效?如果我改为“自动”,下一行也会出现类似的错误,但这次是“unsigned int”改为“unsigned int”,这就是我放弃“自动”的原因:(@Kusavil你需要对所有包含向量值的变量使用相同的类型,所以
k
j
都必须是
\uu int64
我想当我同时更改
k
j
时,我在其他地方得到了警告,但这是因为其他东西,现在可以正常工作了k大家:)你们用什么,它对你们有用?如果我改为“自动”,下一行也会出现类似的错误,但这次是“unsigned int”改为“unsigned int”,这就是为什么我去掉了“自动”:(@Kusavil你需要对所有包含向量值的变量使用相同的类型,所以
k
j
都必须是
\uu int64
我想当我同时更改
k
j
时,我在其他地方得到了警告,但这是因为其他东西,现在可以正常工作了谢谢你们的链接,这解释了很多:)我不知道它是在c++11中引入的,也不知道如何找到它。谢谢你们的链接,这解释了很多:)我不知道它是在c++11中引入的,也不知道如何找到它。