2016-09-29 39 views
-3

私はC++の新機能で、圧倒的に簡単なことをしようとしています.0から1私はRandomVecを呼び出す関数を呼び出すことによって。しかし、それは私に "double 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

これは 'double double'です。これは 'double W []'はdouble型の配列です。 – freakish

+0

実際に、 'double '型のインデックス演算子[]を使うことができると思いますか?誰があなたにそう教えた? –

答えて

1

あなたも、それを自分で言った、あなたはに配列を埋めたいです。 Wの定義を見ると、配列ではなくdoubleという単一のものです。

+0

はい、私は最初に 'double W [cols + 1];と宣言しようとしましたが、正しいサイズになりますが、次にdouble型の引数がdouble型のパラメータと互換性がありません"_同時に私のオリジナルのエラーを維持しながら..どのように私はWを作成する機能はありますか? – Petahanks

+0

@Petahanks _'double W [cols + 1]; ''_ VLAは標準のC++に準拠した構文ではありません。代わりに 'std :: vector W(cols + 1);'を使用してください。 –

1

W[element]と言うとき、普通の古いdoubleに倍精度の配列としてアクセスしようとしています。 RandomVec(...)の外側にあるdouble型の配列を作成するか、またはその内部に戻して返す必要があります。

配列を渡す場合は、std::vectormainに、ベクトルへの参照を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

関連する問題