警告1警告C4244:'参数' :来自&time;< time_t' to' unsigned int',可能丢失数据加上其他错误

时间:2016-02-07 04:21:58

标签: c++ visual-c++

// Write a random number generator that returns a random folating point number between 0.0 and 1.0.

#include "stdafx.h"
#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std;

int rand_float(int n);

int main()

{

int n, i;
double r;

srand(time(NULL));

cout << "Enter number of dice to roll: ";
cin >> n;

for (i - 1; i <= n; i++) {
r = rand_float();
cout << r << endl;

}
return 0;

}

// Random Float Function
// 
double rand_float() {

return (double) rand () / RAND_MAX;

}

现在问题/错误是

警告1警告C4244:&#39;参数&#39; :来自&time;&lt; time_t&#39; to&#39; unsigned int&#39;,可能丢失数据

警告2警告C4552:&#39; - &#39; :运算符无效;具有副作用的预期算子

错误3错误C2660:&#39; rand_float&#39; :function不带0个参数

1 个答案:

答案 0 :(得分:1)

  

警告1警告C4244:'参数':从'time_t'转换为'unsigned int',可能丢失数据

这适用于srand(time(NULL));,其中time返回的值大于srand的参数值。

旧代码经常会发生这种情况,因为time_t最近变得更大,因此我们不会耗尽时间值。它计算自1970年以来的秒数,现在是一个非常大的数字。

  

警告2警告C4552:' - ':操作员无效;具有副作用的预期算子

这适用于for (i - 1; i <= n; i++),其中第一部分i - 1无效。你可能意味着i = 1

  

错误3错误C2660:'rand_float':函数不接受0参数

您已将该函数声明为int rand_float(int n);,因此当您使用0参数调用它时,编译器正确地认为您应该传递n的值。

当您稍后定义double rand_float()时,编译器认为这是一个完全不同的函数。您可以重载具有相同名称但不同参数的函数,因此根据语言可以,但可能不是您想要的。

如果这是您要从main调用的函数,则应更改代码顶部的声明以匹配。