为什么我得到“无法忽视的空虚价值,因为它应该是”?

我有以下function:

void getdata(int arr[], int n) { for (int i = 0; i < n; i++) { int a = srand(time(NULL)) arr[i] = a; } } 

我称之为main

 getdata(arr,1024); 

我得到“无效的价值,因为它应该被忽略”,但我不明白出了什么问题。 为什么我会收到此错误?

  int a = srand(time(NULL)); 

srand的原型是void srand(unsigned int) (假设你包含了 )。
这意味着它什么都不返回……但你正在使用它返回的值(???)通过初始化分配给a


编辑:这是你需要做的:

 #include  /* srand(), rand() */ #include  /* time() */ #define ARRAY_SIZE 1024 void getdata(int arr[], int n) { for (int i = 0; i < n; i++) { arr[i] = rand(); } } int main(void) { int arr[ARRAY_SIZE]; srand(time(0)); getdata(arr, ARRAY_SIZE); /* ... */ } 

原始海报引用了GCC编译器错误消息,但即使通过阅读此线程,也不清楚错误消息是否正确解决 – 除了@pmg的答案 。 (+ 1,顺便说一句)


错误:无法忽略void值,因为它应该是

这是一个GCC错误消息,表示函数的返回值为’void’,但您尝试将其分配给非void变量。

例:

 void myFunction() { //...stuff... } int main() { int myInt = myFunction(); //Compile error! return 0; } 

不允许将void分配给整数或任何其他类型。

在OP的情况:

 int a = srand(time(NULL)); 

…不被允许。 根据文档 , srand()返回void

这个问题与以下内容重复:

  • 错误:无法忽略void值,因为它应该是
  • “虚空价值不应该被忽视,因为它应该是” – Qt / C ++
  • GCC C编译错误,无法忽略void值,因为它应该是

我正在回复,尽管它是重复的,因为这是Google在此错误消息中的最佳结果。 因为这个线程是最重要的结果,所以这个线程提供简洁,清晰且易于查找的结果非常重要。

srand不会返回任何内容,因此您无法使用其返回值初始化a ,因为它不会返回值。 你的意思是打电话给rand吗?

  int a = srand(time(NULL)) arr[i] = a; 

应该

  arr[i] = rand(); 

并将srand(time(NULL))放在程序的最开头。

“void值不被忽略,因为它应该是”当srand(time(NULL))之类的函数没有返回某些内容时会发生此错误,并且您正在处理它,因为它正在返回某些内容。 与队列中pop()函数的情况一样,如果将弹出元素存储在变量中,则会得到相同的错误,因为它不会返回任何内容。