[英]C++ error inside function: expression must have pointer-to-object type
我是 C++ 新手,我正在尝试做一些应该非常简单的事情:通过调用我称为 RandomVec 的函数生成 0 到 1 之间的小随机数 (RV) 数组。 但是它在函数中给了我一个错误,说“双 W 表达式必须具有指向对象的类型”。
我不明白我做错了什么,有人能告诉我这个错误是关于什么的,我该如何解决? 谢谢。
#include <iostream>
#include <random>
using namespace std;
double RandomVec(double W, const int cols) {
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_real_distribution<> dis(0, 1);
for (int element = 0; element < cols +1; element++) {
W[element] = dis(gen);
}
return W;
}
int main()
{
const int cols = 4;
double RV;
double W;
RV = RandomVec (W,cols);
return 0;
}
你自己也说了,你要填一个数组。 如果你看看你的W
定义,它是一个double
,而不是一个数组。
当您说W[element]
时,您正试图访问什么是普通的旧double
精度作为double
精度数组。 您必须在RandomVec(...)
外部或内部创建一个双精度数组并返回它。
如果您想传入一个数组,请考虑在main
使用std::vector
并将对该向量的引用传递给RandomVec
。
double RandomVec(std::vector<double>& vec, const int cols) {
//...
for (int element = 0; element < cols + 1; element++) {
vec.push_back(dis(gen));
}
}
int main {
// ...
std::vector<double> my_vector;
// ...
}
下面是使用向量的可能解决方案。 如果你想要一个有 4 列的向量,索引必须从 0 到columns
,而不是columns + 1
。 如果选择使用std::
,则无需添加using namespace std;
在上面。 在最后添加了生成的随机向量的打印。
#include <iostream>
#include <conio.h>
#include <random>
std::vector<double> RandomVector(std::vector<double>& vector, const int columns) {
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_real_distribution<> dis(0, 1);
for (int element = 0; element < columns; element++)
vector.push_back(dis(gen));
return vector;
}
int main() {
const int columns = 4;
std::vector<double> my_vector;
my_vector = RandomVector(my_vector, columns);
// print out generated random vector
for (std::vector<double>::const_iterator i = my_vector.begin(); i != my_vector.end(); ++i)
std::cout << *i << ' ';
// wait for a character to exit
_getch();
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.