• ベストアンサー

VC++についてです

クラスの中で他のクラスで定義した変数を使う場合はどのようにしたらいいのでしょうか?又、Cで作ったプログラムをVC++組み込もうとしているのですが、変数宣言等はどのクラスのどこにすれば、他のクラスでも使えるようになるのでしょうか? よろしくお願いいたします。

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

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

お小言は抜きにして、質問にだけ答えます。 > クラスの中で他のクラスで定義した変数を使う場合はどのようにしたらいいのでしょうか? 他のクラスで使用したいメンバ変数をpublicにします。具体的には、 class A { public:  int variable; }; class B { public:  void func(A& a)  {   a.variable = 1234;  } }; あるいは、メンバ変数へのアクセスを許可したいクラスを随伴クラスにします。具体的には、 class A {  int variable;  friend class B; }; class B { public:  void func(A& a)  {   a.variable = 1234;  } }; > Cで作ったプログラムをVC++組み込もうとしているのですが、変数宣言等はどのクラスのどこにすれば、他のクラスでも使えるようになるのでしょうか? C側で宣言した変数をC++側で使うには、次のようにします。 /* A.c */ int a; /* B.cpp */ extern "C" int a; void func() {  a = 1234; } 多くの処理系では、変数は明示的にC結合にしなくても大丈夫ですが、Visual C++の場合は必ずextern "C"とする必要があります。

関連するQ&A

  • 至急教えてください(VC++)

    VC++の質問です。 クラスA : クラスBを宣言 B b; クラスB : クラスCを宣言 C c; クラスC クラスCからクラスBでpublicで宣言されている関数を読み出すには どうしたらよいのでしょうか。 自分を宣言したクラスのポインタを取得する関数とかがあるのでしょうか。

  • VC++でクラス変数の定義方法。

    VC++でクラス変数の定義方法。及び、使用方法を教えてください。 しっかりと、インスタンスを生成して変数を使用してるのですが、呼んだときには、変数は初期化されてNULLになってしまいます。 どうしたらよいか教えてください。

  • windows10でVC6.0++のclを使いたい

    cl.exeの場所:C:\Program Files\Microsoft Visual Studio\VC98\Bin 環境変数INCLUDE設定:C:\Program Files\Microsoft Visual Studio\VC98\Include 環境変数LIB設定:C:\Program Files\Microsoft Visual Studio\VC98\Lib を登録したのですが、mspdb60.dllがないといわれました。 検索したらあるのですが、 どうすれば、Windows10でvc6.0++のCコンパイラを使えますか? 教えてくださいよろしくお願いします。

  • VC++2010を覚えたい(極めたいではない)

     ExcelVBAで実験データを整理していますが、Excelのみでしか使えない等の問題からVC++2010をそこそこ使えるようになりたいのです(極めようとまでは思っていません)。先日もここで質問させていただいたのですが、メッセージボックスを出したりファイル操作をしようとすると、知識不足のためコードが正しく書けずエラーばかり出て格闘しています(VBAだと、msgbox"こう書けば表示される" の一行で済むことをやるのに、かなり格闘します)。  そこで、これら基本動作を完全に使いこなせるようにするために勉強をしたいのですが、何について勉強すればいいのかよくわかりません。どんな本を買って何を勉強すべきでしょうか?いい本があったら教えてください。特にできるようになりたいことを下に書きます。 1 #include <stdio.h>とかのインクルードファイルを宣言する位置。 2 intやdouble等の変数宣言も、たまにエラーでできないことがある。   関数内では変数宣言の方法が違うのかな?   String^ でどうして^がついたりつかなかったりするかわからない。   これでエラーとかよく出ます。^は大嫌い>< 3 メッセージボックスとかの表示。messageboxの前や後ろにshowとか::とかどうして必要か   わからない。メッセージボックスに確認する変数の数値を出すのも難しい。 4 データファイルをいろいろ操作したい。データファイルはテキストデータのみ 5 グラフもVC++で書けるとうれしい。必要があるときだけでいい。 forやif等の制御構造、配列、ポインタ等はもう知っています。 これらができるようなるには、「クラス」とかを勉強するとわかるのでしょうか? クラスが何のことだかもわかりませんが。

  • VC++ Express m_hWnd

    VC++ Express edition 2008で、Command Promptを起動、directoryを替えようとして、 HINSTANCE ret = ShellExecute(m_hWnd,"open","cmd.exe",NULL,"c:\\Program Files",SW_SHOW) で、m_hWndが定義されていないとエラーが出てきました。VC++2005 standard version では出るようですが、Express edition 2008では定義されてないようです。この部分、Expression editionではどのように定義するのか教えてください。2008 Express editionで別の変数が適当であれば、そちらを教えていただけませんか?

  • VC++6.0ですが、違うクラスで同じ変数を利用?

     VC++6.0ですが、ダイヤログボックス内のボタンを押すともうひとつのダイヤログボックスが起動するプログラムを作っています。このときClassViewでみるとクラスも最初のダイヤログボックスのクラスと新しいダイヤログボックスのクラスがそれぞれできています。  ひとつのクラス内の関数で共通に変数を利用したいときは、関数の外に static char xxx[100]; などを書けば、複数の関数でその変数を利用できましたが、違うクラスで共通に利用したい変数はどのようにして作ればよいのでしょうか。 よろしくお願いします。

  • SolarisとLinuxのグローバル変数の扱いについて

    Solaris用のソースをLinuxで使えるように変更したいのですが、 グローバル変数について以下のようなことが発生していて困っています。 なにか、コンパイルオプションなどで対応はできないものでしょうか? Solaris (CC)では 特にextern宣言しなくても同じシンボルの外部変数はコモンセグメントに1つだけ作成しコンパイル自体は正常である。 しかし、Linux (g++)では externを宣言しないと同じシンボルを再定義したことになりエラーとなる。 これにより、グローバル変数を多用しているプログラムはLinuxでうまくコンパイルができない。 しかし、単純にextern宣言での対応は難しい。 extern宣言は外部で定義してあるグローバル変数を参照する というものだがLinux では 1つの定義を意外は全てexternしなければ、2重定義エラーになってしまう。 つまり、実体が1つであとはそれを参照しているという形でなければいけない。 ところが、その実体をどこにするか特定することができない。 例えば、gというグローバル変数を仮定する。 A.c,B.c,C.cはその3つのソースよりAA.aという静的ライブラリを構成する。 gはA.cで定義してありB.c,C.cはそれを参照する。 ところが C.cは個別にC.oというオブジェクトで他からの呼び出しがあり 別LMにリンクされる。 その時C.c内のgは実体を失うことになり未定義となる。 つまり、どれが実体になるかは何にリンクするかで決まるため 実態を特定できない。 また、共通のヘッダにグローバル変数が定義されている場合も、重複するというエラーを起こすため、 共通ヘッダからグローバル変数を分離し、何れかのソースにグローバル変数の実態を定義させる必要がある。 共通ヘッダを使っている他のソースはそのグローバル変数の実態を参照するようにexternの宣言をする。

  • VC++6.0の基本的な質問(操作)

    VC++初心者です 別々のプログラムA、とBがあったとします。プログラムAの中で使われているクラスの派生クラスをプログラムBで作ろうと思いますが、そういう場合みなさんどうしてますか(簡単な方法ありませんか)? また作ったクラスやリソースをワークスペース内から削除(コメントアウトではなく)したいのですが、うまくいきません。これも何か良い方法ありませんか? よろしくお願いします。

  • プログラムの原理について

    プログラムはメモリ上どのように展開されているのか、宣言した変数はメモリにどう割り付けられるのか、変数を参照したり、変数に値を入れるときはどういう仕組みになっているのか等わかりやすく教えてください。お願いします。 また、宣言、定義などといった言葉に関しての質問になるのですが、定義は記憶が割り当てられていて、宣言は割り当てられていないと本にはあるのですが、これはメモリとスタックとの違いでよいのでしょうか?また、構造体は定義されていると書かれているのですが、その構造体の中のintの宣言は、定義になるのでしょうか?

  • ソースファイルの分割について

    a.h クラスの定義 a.cpp クラスのメンバ関数の定義 b.h #include "a.h" クラスの定義 b.cpp クラスのメンバ関数の定義 ----c.cpp---- #include "a.h" #include "b.h" a.hで定義したクラスの宣言 b.hで定義したクラスの宣言 メインの処理 ----------------------------------------- b.cppで定義しているクラスのメンバ関数にて a.cppで定義したクラスのメンバ変数にアクセスしたいのです。 どうするのが一番良いのでしょうか? a.cppにメンバ変数を返すだけの関数を定義してb.cppでc.cppで宣言したa.hのクラスを extern宣言してみたのですがエラーが出てコンパイルが通らないです。

専門家に質問してみよう