2016-09-29 89 views
-3

我是C++的新手,我試圖做一些應該非常簡單的事情:生成一個0到0之間的隨機數字(RV) 1通過調用我稱之爲RandomVec的函數。但是它在給出「雙W表達式必須具有指針對象類型」的函數時給了我一個錯誤。函數內部的C++錯誤:表達式必須有指針對象類型

我不明白我在做什麼錯,有人可以告訴我這個錯誤是關於什麼以及我如何解決它?謝謝。

#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; 
} 
+0

此:'雙W'是雙。這個:'double W []'是一個雙精度數組。 – freakish

+0

是什麼讓你真的認爲你可以使用'double'類型的索引'operator []'?誰教你這樣? –

回答

1

即使你自己說的,你要填寫數組。如果你看看你的W定義,它是一個單一的double,而不是一個數組。

+0

是的,但我首先嚐試聲明它爲'double W [cols + 1];'所以它將是正確的大小,但然後我得到另一個錯誤,說_ _「參數類型雙參數不兼容參數類型雙「_同時保留我原來的錯誤..函數如何讓我創建W? – Petahanks

+0

@Petahanks _'double W [cols + 1];''_ VLA不是標準的C++兼容語法。使用'std :: vector W(cols + 1);'代替。 –

1

當您說W[element]時,您正嘗試訪問簡單的舊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; 
    // ... 
} 
0

以下是使用矢量的可能解決方案。如果您想要具有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; 
} 
+0

非常感謝,似乎工作正常。 – Petahanks

相關問題