C++でvectorを他のクラスで共用する方法

このQ&Aのポイント
  • C++のVisual C++2013を使用しています。現在、vectorをpublicで扱いたいですが、型が違うためアクセスできません。
  • vectorを他のクラスで共用するための適切な定義方法を教えてください。
  • どこにvectorの定義を記述すればよいのか分かりません。ご教授願います。
回答を見る
  • ベストアンサー

vectorをpublicで扱いたい

Visual C++2013を使用しています。 現在、vectorを下記の位置に定義しています。 public ref class MainForm : public System::Windows::Forms::Form { MainForm(void) { 略1 } 略2 private: void 関数1(引数1) { vector<vector<double>> array_csv(要素数1, vector<double>(要素数2)); } } このvectorを他のクラスと共用して扱いたいのですが、 どう定義したらいいか分かりません。 やってみたこと 略1や略2のところへ以下のように定義してみましたが、関数1内からvectorへアクセスすると、 型が違うため、アクセスできません。 vector<vector<double>> array_csv(int, vector<double>()); 定義する場所か定義の方法がおかしいのでしょうか? ご教授願います。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

無理。 managedクラスはnativeなメンバ変数を持てません。

tomo002233
質問者

お礼

回答ありがとうございます。 他の方法を試してみます。

関連するQ&A

  • 「vector< vector<double>>からdouble*への

    「vector< vector<double>>からdouble*への変換につきまして」 C++の行列計算のライブラリとして以下の関数を使うことになったのですが、 //matA*vecB=vecX void CalcMatrix(int rows, double* matA, double* vecB, double* vecX); この引数として vector< vector<double>> で定義した変数を渡す方法はありますでしょうか? もし御座いましたらご教授御願い致します。

  • 配列ポインタの関数中のメモリ領域

    C初心者です。 関数中で配列ポインタを宣言する場合についての質問です。 たとえばDouble型の2次元のローカルな配列ポインタを用いる場合、 その配列要素数が100である場合は void 関数名(引数1,引数2,...){ int i; double *a[2]; for(i=0;i<2;i++){ a[i] = (double*)malloc(100*sizeof(double)); } for(i=0;i<2;i++){ free(a[i]); } } またこの値を引数1とする場合、引数1をoutとすると void 関数名(double *out,....) とし、 for(i=0;i<2;i++){ out[i] = a[i]; } とすればよいのでしょうか? もしこれがあっているとすると、つぎのような現象で困っています。 配列要素数を50000個ぐらいとし、複数の関数で、同様に mallocを用いて、配列ポインタのローカルでメモリ領域を確保しようとした場合、コンパイルは成功するのですが、その後実行すると、エラーが発生したというメッセージとともにコマンドウィンドが強制終了します。 コンパイラはVisual C++ EXpress Edition 2008です。 データサイズを小さくすると、エラーは起きません。 malloc関数で確保するメモリサイズは、関数の入力引数で定義された変数を用いて計算しており、データサイズに応じて変更されます。 よろしくお願いいたします。

  • C言語(引数)

    はじめまして。 C言語を習い始めたものです。 関数を定義するとき、よく耳にする、仮引数や実引数があると思います。 仮引数は関数の定義内で値をうけとる変数のことであり 実引数は関数を呼び出す際に渡す値を実引数というらしいのですが どこからどこまでを仮引数と呼ぶのかわかりません。 例えば、 fの関数の定義内で ↓があるとします。 (関数にする意味はないのですが、確認のためあしからず・・・) double f(double x) {     x=5;     return(x); } この場合、仮引数とよばれるものは double f(double x)の xが仮引数であって x=5;のxは仮引数と呼ばないのでしょうか?? もしそうならば void f(double x) { printf("%f",x); } のprintf("%f",x);内のxは仮引数とよぶのでしょうか? 質問の内容が意味不明かもしれませんが よろしくお願いします。

  • STLのvectorで作った配列をメンバ変数にする場合は。。。

    C++初心者です。 STLのvectorで作った配列をメンバ変数は 以下のように宣言し、 class Array { public: vector<int> array; void Set(); } Array::Setのメンバ関数でarrayに値をセットします。 そして、メインからarrayを参照しようとしましたが 値が入っていませんでした。 メンバ変数の宣言の仕方が良くないのですか?

  • VC++ TextBoxの定義

    お世話になります。 c++でTextBoxの入力制限(数値のみ)を、下記URLを参考に作成しているのですが、 TextBoxの動作を定義するところが、コンパイルエラーになります。 http://dobon.net/vb/dotnet/control/numerictextbox.html 【エラーになる定義部】 this->TextBox->KeyPress += System::Windows::Forms::KeyEventHandler(this, &MainForm::KeyPressEventArgs); ※ エラー内容は「XXXはYYYのメンバではありません」 「system::」のところか「&MainForm」のところの定義が悪いのだと思うのですが、 どの様に宣言すればよいのか教えていただけないでしょうか 【関数】 System::Void TextBox_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e) { 本文 }

  • vector間における効率的な値の比較

    2つのベクターに入ったdoubleの網羅的な比較を行う関数をC++で書こうとしています。 (VC++ 2008) doubleのベクター vctr_1 , vctr_2 があるとします。 vctr_1 には (100.0, 200.5 , 300.1 , 400.0 ) vctr_2 には(50.0 , 70.2, 100.1, 220.0 , 300.0 ) というdouble の値が入っていて vctr_1の値のうち、vctr_2に近い値(誤差0.2以内)が見つかるものを.新しいベクターとして返すという処理を考えています。 この場合 100 : 100.1 と300.1: 300.0 が 誤差 0.2 未満で近い値といえ、100 と300.1が格納されたベクターを返す、という処理です。 私の考えた方法はベクターaの各要素に対してベクターbの各要素をループで比較する、というものでした。 以下コード ---------------------------- //比較を行う関数。ベクター1、2 要素の比較をし誤差内の数値をベクター1からとりだし、別のベクターとして返す。 vector<double> compare_doubles_with_tol(vector<double> v1,vector<double> v2 , double tol ){ //似た値を格納するベクター vector<double> v_match; //ベクター1に関してループ vector<double>::iterator it1 = v1.begin(); while( it1 != v1.end() ){ //ベクター2に関してループ vector<double>::iterator it2 = v2.begin(); while( it2 != v2.end() ){ //誤差内の値を見つける if( fabs(*it1 - *it2) < tol ){ v_match.push_back(*it1); } ++it2; } ++it1; } return v_match; } int main() { //ベクター1 std::vector<double> vctr_1; vctr_1.push_back(100.0); vctr_1.push_back(200.5); vctr_1.push_back(300.1); vctr_1.push_back(400.0); //ベクター2 std::vector<double> vctr_2; vctr_2.push_back(50.0); vctr_2.push_back(70.2); vctr_2.push_back(100.1); vctr_2.push_back(220.0); vctr_2.push_back(300.0); //誤差0.2内で似た値があるものを新たなベクターとして得る。 vector<double> matched = compare_doubles_with_tol(vctr_1,vctr_2,0.2); for (int i = 0 ; i < matched.size() ; ++i){ cout << matched[i]<<endl; } return 0; } ------------------------- このコードで望んだ結果は得られますがループの繰り返しを行っていて処理が遅くなってしまいます。実際の仕事ではベクターの要素数が100前後のものを非常に数多く処理しなければならず、このままでは処理時間が膨大なものになってしまいそうです。 このような場合どのような処理、コードを作成すれば処理速度の向上が望めるでしょうか。

  • 関数の引数をvoid*でキャストする

    最近見かけたCのプログラムで、関数の引数の型は void* なのですが、その関数を使うときに 引数をvoid*でキャストしていました。 例えば、 func ( (void*) p ); こういうことです。 私の知っている知識では、 void* と 任意の型のポインタは キャストなしに相互に代入可能です。 関数の引数でも、キャストは要らないものだと思っていました。 そうすると、引数を void* でキャストするのは無意味だと思うのですが、・・・ 違うのでしょうか。処理系によるとか。 逆に、関数の引数の型がchar*などで、渡すものが void* のときはどうなのでしょうか。 下のプログラムは、関数byte_orderの引数の型はvoid*ですが、int型へのポインタ( &a )を設定しています。私の環境では、コンパイルエラーも警告もないし、動作も正常です。 #include <stdio.h> #include <string.h> void byte_order(void *vp) { char char_array[4]; strncpy(char_array, vp, 4); printf("出力します:%x %x %x %x\n", char_array[0], char_array[1], char_array[2], char_array[3]); } int main(void) { int a = 0x12345678; byte_order(&a); return 0; } このプログラムは単なる一例であって、質問はバイトオーダに関するものではありません。 また、C言語の質問であって、C++ではありません。

  • JavaScriptでArrayオブジェクトもどきの独自オブジェクトを作りたい!

    お世話になります。 JavaScriptを用いて、ある条件の下でArrayオブジェクトのような独自オブジェクトを定義したいのですが、ゆっくり調べている時間がなく、こちらの方を頼らせていただくことにしました。 【やりたいこと】 Arrayオブジェクトのような独自オブジェクトを定義したい。 【やりたいことの条件】 条件1: Arrayオブジェクトが戻り値として返ってくる既存の関数があり、その戻り値であるArrayオブジェクト自身を新たなオブジェクトとして定義したい。 この関数は、 ・Arrayオブジェクトの要素とは全く無関係の引数をとる。 ・この関数の仕様を変更することはできない。 という特徴があります。 条件2: 独自オブジェクトを作る際の引数は、上述の既存の関数の引数と同じ。 【サンプル】 上記の説明では、少々わかりにくいかもしれませんので、使い方のサンプルを以下に示します。 既存の関数: function immovableFunc(param1, param2) { var myArray = new Array; … return myArray; } 今回作りたいオブジェクト: PseudoArray 今回作りたいオブジェクトの使われ方: var pa = new PseudoArray(param1, param2); そもそも、このようなオブジェクトが作れるのか?、作れるとするならばどのように記述するのか?見当も付かない状態です。 皆さんのお知恵を拝借させていただければと思います。 どうぞ、よろしくお願いいたします。

  • STLのvectorのデフォルトの予約要素数は?

    STLのvectorコンテナの、あらかじめメモリに確保される要素数はreserve関数で変更できますが、reserve関数を使わない時のデフォルトの予約要素数っていくつかご存知の方いますか?

  • DLLの作り方

    DLLでは、ポインタのアドレス渡しのように、可変長サイズのVectorコンテナを引数にすることは可能ですか? DLLのソースコ-ド extern "C" __declspec(dllexport) void __stdcall matinv(vector<vector<complex<double> > >,vector<vector<complex<double> > >&); void __stdcall matinv(vector<vector<complex<double> > > a,vector<vector<complex<double> > > &a_inv) {   コード  } 呼び出し側の関数宣言 #include <vector> #include <math.h> #pragma hdrstop #include <complex.h> using namespace std; extern "C" __declspec(dllimport) void __stdcall matinv(vector<vector<complex<double> > > a,vector<vector<complex<double> > > &a_inv); よろしく御願いいたします。

専門家に質問してみよう