<where do =“”i =“”convert?=“”>警告C4244:'初始化':从'__int64'转换为'int',可能丢失数据</where>

时间:2014-04-01 08:27:21

标签: c++

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

警告C4244:'初始化':从'__int64'转换为'int',可能导致数据丢失

但我真的不明白为什么。我有s的向量__int64,但我的大小是整数,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;
}

2 个答案:

答案 0 :(得分:2)

for ( int k : s )遍历s的所有元素,s的模板类型为__int64,因此k的类型需要__int64 1}}

请参阅:http://www.cprogramming.com/c++11/c++11-ranged-for-loop.html

答案 1 :(得分:2)

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