繁体   English   中英

函数内部的 C++ 错误:表达式必须具有指向对象的类型

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM