• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:クラスが認識されていない(VC++))

クラスが認識されていない(VC++)

miswaki777の回答

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

メンバ関数の追加をClassViewから行ったときと、手書きで入力したときの差はないと思います。 メンバ関数の追加をClassViewから行うときは、アクセス制御で (1)Public (2)Protected (3)Private のいずれかが選択でき、選択したアクセス制御で関数が宣言されます。 C++では、classのメンバ関数はデフォルトではprivateで宣言されています。 例えば、 class Blue{ { void FuncBlue(); } のように記述したとき、FuncBlue()メンバ関数はprivateです。 それに対して、メンバ関数の追加をClassViewから行うときは、アクセス制御のデフォルトはPublicになっています。 従って、アクセス制御をデフォルトのままClassViewからメンバ関数を追加すると、 class Blue{ { public: void FuncBlue(); } のようなコードが作成されます。 この場合、当然FuncBlue()メンバ関数はpublicです。 もしかしたらその辺が関係していたんじゃないでしょうか?

_comcom
質問者

お礼

どうもありがとうございます。 僕の勘違いみたいでした。 非常に参考になりました。

関連するQ&A

  • C++/CLIでクラス内の要素を相互利用する方法

    C++/CLIでクラスの中に定義された構造体等を、複数のクラス間で相互利用したいのですが、そのようなことは可能なのでしょうか。 とりあえず以下のコードを見ていただきたいのですが、 ref class class1; ref class class2; ref class class1 { public:  enum struct enum1  {   aa,bb  };  void func1a(class1^ obj){} // 1. OK  void func2a(class2^ obj){} // 2. OK  void func1b(class1::enum1 e){} // 3. OK  void func2b(class2::enum2 e){} // 4. ERROR }; ref class class2 { public:  enum struct enum2  {   aa,bb  };  void func1a(class1^ obj){} // 5. OK  void func2a(class2^ obj){} // 6. OK  void func1b(class1::enum1 e){} // 7. OK  void func2b(class2::enum2 e){} // 8. OK }; これの4.がコンパイルエラーになります。 このような構造を定義することはできないのでしょうか。

  • クラス内で、親ではない他のクラスへアクセスしたい。

    こんばんは、C++のプログラミングに関しての質問です。 現在、勉強がてら作っているゲームプログラミングで、躓いている部分があります。 現在、プレイヤーではないオブジェクトの描画を以下のソースコードで描画しています。 for(Check_OBJ=1;Check_OBJ<OBJ_num;Check_OBJ++) OBJ_Array[Check_OBJ]->Draw_Graph(PL_Array[1]->Ref_x(),PL_Array[1]->Ref_y()); OBJ_ArrayはObjectクラス、PL_ArrayはPlayerクラス、Ref_変数名 は変数名の値を返す関数です。 このソースコードを、Objectクラスのメンバ関数Action()の中に入れたいのですが、エラーが出てしまうのです、ソースコードは以下の通りです。 void Object::Action() { Draw_Graph(PL_Array[1]->Ref_x(),PL_Array[1]->Ref_y()); } エラー内容は error C2227: '->Ref_y' : 左側がクラス、構造体、共用体、ジェネリック型へのポインターではありません。 error C2027: 認識できない型 'Player' が使われています。 です。 Playerクラスが定義されてないと認識しているのかと思い、前方宣言もしてみたのですが改善できず、どうすれば良いのか解りません。 クラス内で他のクラスへアクセスするためには何か他の処理が必要なのでしょうか・・・? 解決方法をご存知の方がいたら教えて頂けると助かります、よろしくお願いします。

  • クラス内で上位クラス内メンバの値を変更

    クラス内で上位クラス内メンバの値を変更 test2Objクラス内で test1Objメンバ内のtest1Valueの値を2に変えたい このような事は可能でしょうか? ================================ class Test2Obj{ public: void changeValue(){ //ここでtest1Objメンバ内のtest1Valueの値を2に変えたい } }; class Test1Obj{ public: int test1Value; Test2Obj *test2Obj; //コンストラクタ Test1Obj(int tmp_test1Value){ setTest1Value(tmp_test1Value); test2Obj=new Test2Obj(); } void setTest1Value(int tmp_test1Value){test1Value=tmp_test1Value;} }; int main(void){ Test1Obj *test1Obj=new Test1Obj(1); printf(">>>%d\n",test1Obj->test1Value); //ここでtest1Obj->test1Valueの値を変えたい test1Obj->test2Obj->changeValue(); } ================================ もしコードに問題があればご指摘をお願いします。

  • C++ クラスをメンバにもつクラスについて

    お世話になります。C++初心者でうまくコードが書けません(><) クラス1と2があり、クラス1のメンバにはクラス2があります。 メインでクラス1をインスタンス化してクラス2のfunc2を呼び出します。 func2ではクラス1のインスタンスから呼び出された場合にクラス1の m_int1を取得します。 Class Class1{ public:  int m_int1;  Class2 m_Class2; }; Class Class2{ public: void func2(); }; void Class2::func2(){  /*ここの記述方法が分かりません*/  /*C1から呼び出されたらC1のm_int1に100を入れる*/  /*以下間違え*/  class1 C2_1;/*別のclass1のオブジェクトなのでこれに入れてもダメっぽい*/  C2_1.m_int1 = 100; } void main(){  class1 C1;  C1.m_int1 = 10;  C1.m_class2.func(); } C1.m_class2.func()の中から呼び出したC1にアクセスする方法が 分かりません(TT)。実体がまだあるのだからアクセスする方法は あると思うのですが・・・ どなたかよろしくお願いします。

  • 多重定義が起きている?--lnk2005エラー:VC++

    今つまずいている問題は、VC++2008環境下で、以下のような構造になっているプログラムにおいて、多重定義?されているのでコンパイルが通らないというものです。 ソースコードを載せることは大きすぎてできないので、問題となる部分の記述のみ抽出して書きます。 -------define.h---------- ・・・・(module.h内の関数に使われる型の定義など) --------------------------- -------module.h---------- #include "define.h" void mod_1(void){・・・} void mod_2(void){・・・} --------------------------- このように、2つのヘッダーファイルがあり、define.hをインクルードしてmodule.hを使うという構造です。 (一般的ではないようですが、module.h内にmod_1やmod_2の実体を書き込んでいます。) その中で、以下のようなcppソースファイルがあります。 -------Main.cpp---------- #include "module.h"   (他のMain.cpp内の関数の都合上、Main.cppでもmodule.hをインクルードしています。関係あるかもしれないと思い書きました。) int main(){ M(); N(); } ------------------------ -------M.cpp---------- #include "module.h" void M(void){ mod_1(); mod_2(); } ---------------------- -------N.cpp---------- #include "module.h" void N(void){ mod_1(); mod_2(); } ---------------------- とすると、コンパイルの結果は次のようになります。 1>N.obj : error LNK2005: "void __cdecl mod_1(void)" (?mod_1@@YAXXZ) は既に M.obj で定義されています。 1>N.obj : error LNK2005: "void __cdecl mod_2(void)" (?mod_2@@YAXXZ) は既に M.obj で定義されています。 多重定義や多重インクルードは起こしていないと思っていますが、M.cppとN.cpp内の定義が衝突する理由がわかりません。どなたか理由が思いつく方、教えていただけたら幸いです。お願いいたします!! ◆◆◆   ◆◆◆   ◆◆◆   ◆◆◆   ◆◆◆ ちなみに、たとえばMやNとまったく同じ「A.cpp」を作り、このように書いたとします。 -------A.cpp---------- #include "module.h" void A(void){ mod_1(); mod_2(); } ---------------------- そしてmain関数の中に、MやNと同様に『A();』を付け加えたとします。 すると、実行結果はこのようになります。 1>M.obj : error LNK2005: "void __cdecl mod_1(void)" (?mod_1@@YAXXZ) は既に A.obj で定義されています。 1>M.obj : error LNK2005: "void __cdecl mod_2(void)" (?mod_2@@YAXXZ) は既に A.obj で定義されています。 1>N.obj : error LNK2005: "void __cdecl mod_1(void)" (?mod_1@@YAXXZ) は既に A.obj で定義されています。 1>N.obj : error LNK2005: "void __cdecl mod_2(void)" (?mod_2@@YAXXZ) は既に A.obj で定義されています。 VC++はファイル名のアルファベット順にコンパイルするようですが、どちらにせよmain関数内で呼び出されていること以外何の関わりも無いはずのA、M、Nの中での出来事が、衝突する理由が、調べども思い当たりません。 お願いいたします。

  • ひとつのファイルにクラスは1つ?

    こんにちは。C#をやっていた者ですが、プログラミングコンテストに出場するにあたって、Javaを勉強しています。 基本的な部分は同じで、似てる部分も多々あって習得しやすいと思っていたのですが、どうやら細かい違いがあり、悩まされています。 C#では、ひとつのソースファイルに複数のクラスを記述できました。Javaの参考書でもサンプルコードに、 class Point3D{ public double x,y,z; } class example{ public static void main(String args[]){ Point3D p1 = new Point3D(); } } なんてありましたが、どうもEclipseにこれをいれると、 トークン "class" に構文エラーがあります。正しくは @ です と出てきてしまいます。メンバークラスを使えば済む話ですが、参考書にこのように書いてあるのにエラーが出るのはなぜでしょうか?C#だとすっきり通るのですが・・・。 そもそもオブジェクト指向について私はまだ勉強が足りないのでしょうか? ご教授願います。

  • クラスの中にある関数を使いたい

    次のようなクラスを使ってエレメントを作った時に、 マウスを重ねたらハイライト表示っぽくさせるために、 onmouseoverにこのクラスのメンバ関数setBackgroundColorをセットしたいのですが、 クラス内で使う時は先頭にthisが必要になると思います。 そのthisはどうやって取り出したら良いのでしょうか? それかこのやり方は間違っていて、別のやり方でやった方が良いのでしょうか? function TextObj(text) { //実体を作る var textNode = document.createTextNode(text); var spanElement = document.createElement("span"); spanElement.style.position = "absolute"; spanElement.appendChild(textNode); document.body.appendChild(spanElement); //オブジェクトへの参照を保存 this.obj = spanElement; } TextObj.prototype.setMouseOver = function() { this.obj.onmouseover = function(){ setBackgroundColor(255,255,255);←ここでこの関数を使いたい } } TextObj.prototype.setBackgroundColor = function(red, green, blue) { this.obj.style.backgroundColor = "rgb(" + red + "," + green + "," + blue + ")"; }

  • VC6でDLL(COM+)作成中にエラーが出ました。

    VC6でATL COM AppWizardでDLLを作成しています。 インターフェースメソッドを追加したところ、 (1)の場合はうまくいきましたが、(2)の場合は、エラーと警告が2つ出ました。 理屈がわかっていないので対処方法がわからないのですが、何が原因なのでしょうか? やりたいことは、戻り値1つでなく、3つの戻り値が必要で、 引数4つのうち、最初は関数へ計算の元となる文字列を送り、残りの3つはint型ポインタを与えて、関数内で結果をセットし、呼び出し元でも使えるようにしたいので、このようにしました。通常のC?ではうまくいっていました。 あと読んだ方が良い書籍も探しています。 COM+?について詳しい方、教えてください。 ※COM+というのはVB2005やC#でも健在なのでしょうか? (1) 戻り値のタイプ: HRESULT メソッド名: Test1 パラメータ: なし (2) 戻り値のタイプ: HRESULT メソッド名: Test2 パラメータ: [in] char* a, [in,out] int* b, [in,out] int* c, [in,out] int* d →※ここが間違い? ===== エラー内容 ===== error C2259: 'CComObject<class CTest>' : 抽象クラスあるいは構造体のオブジェクトが宣言されています。 クラス テンプレートのメンバ関数 'long __stdcall ATL::CComCreator<class ATL::CComObject<class CTest> >::CreateInstance(void *,const struct _GUID &,void ** )' のコンパイル中 warning C4259: 'long __stdcall ITest::Test2(unsigned char *,int *,int *,int *)' : 純粋仮想関数は定義されていません。 'Test2' の宣言を確認してください。 クラス テンプレートのメンバ関数 'long __stdcall ATL::CComCreator<class ATL::CComObject<class CTest> >::CreateInstance(void *,const struct _GUID &,void ** )' のコンパイル中 error C2259: 'CComObject<class CTest>' : 抽象クラスあるいは構造体のオブジェクトが宣言されています。 クラス テンプレートのメンバ関数 'long __stdcall ATL::CComCreator<class ATL::CComObject<class CTest> >::CreateInstance(void *,const struct _GUID &,void ** )' のコンパイル中 warning C4259: 'long __stdcall ITest::Test2(unsigned char *,int *,int *,int *)' : 純粋仮想関数は定義されていません。 'Test2' の宣言を確認してください。 クラス テンプレートのメンバ関数 'long __stdcall ATL::CComCreator<class ATL::CComObject<class CTest> >::CreateInstance(void *,const struct _GUID &,void ** )' のコンパイル中

  • クラスの参照(同じファイル内 vs 別々のファイルの場合)

    二つの.javaファイルがあります。 <ABC.java> class ABC { public static void main(String args[]) { A obj = new A(); obj.hello(); } } --------------------------------------------- <A.java> class A{ void hello() { System.out.println("Hello from A"); } } --------------------------------------------- ABC.javaファイルでコンパイルすると、「 シンボルを解釈処理できません。」というエラーメッセージが出ます。でも、ABC.javaファイルの中に、class Aを続けて書くとコンパイルできます。なぜ、別々のファイルにすると参照できないのでしょうか? (おなじフォルダ内に入れています) 教えてください。よろしくお願いします。

    • ベストアンサー
    • Java
  • PHPでサブクラスからスーパクラスのprivate

    メンバにアクセスできる件について PHPでスーパークラスで定義したprivateのメンバにサブクラスからアクセスできる件について 質問です。 class TestClass { private $value01 = "スーパークラスの private メンバ"; public function testMethod01 () { print "スーパークラスのパブリックメソッド"; print "<h1>{$this->value01}</h1>"; } protected function testMethod02(){ print "スーパークラスの protected メソッド"; } private function testMethod03(){ print "スーパークラスの private メソッド"; } public function getMethodList(){ print_r(get_class_methods($this)); } } class ExClass extends TestClass{ private $value01 = "サブクラスの private メンバ"; } $obj = new ExClass(); $obj-> testMethod01(); と上記のようにサブクラスのインスタンスから継承したpublicなメソッド testMethod01()を実行すると スーパークラスのprivateなプロパティにアクセスできてしまいます。 これってどういうことでしょうか?privateメンバってそのクラスの中からだけしかアクセスできませんよね? 上記では、サブクラスからアクセスしているような状態にみえますがどういうことでしょうか? ご教授御願い致します。

    • ベストアンサー
    • PHP