1

私はOOベースのプログラミングが初めてなので、ばかげた質問です:

algorithmObjectというクラスを作成しました。基本的に、それに関連する一連の機能があります。

QT GUI を作成しました。さまざまな onClick イベントでメンバー関数にアクセスできるようにするため、algorithmObject 型のパブリック オブジェクトを作成したいと考えています。

したがって、私のGUI.hファイルには次のものがあります。

public:

algorithmObject Object1;

私のGUI.cppファイルでは、次の方法で初期化しようとしています。

 Object1 = algorithmObject();

MS VS 2010 を使用していますが、コンパイラ エラーが発生します。

エラー C1903: 以前のエラーから回復できません。コンパイル エラー C2065 の停止: 'Object1': 宣言されていない識別子

含めない場合:

Object1 = algorithmObject();

私のGUI.cppファイルで、GUIコンストラクターがオブジェクトを作成してくれることを期待すると、同じエラーが発生します。

どうにかして.cppファイルでオブジェクトを正しく初期化していないと思います。誰かが正しいプロセスを提案できますか?

私の algorithmObject ファイルの概要は次のとおりです。

アルゴリズムオブジェクト.h

#include <iostream>
#include <fstream>

class algorithmObject 
{

public:

algorithmObject (void);
~algorithmObject (void);

void function1 (int parameter);
void function2 ();
}

アルゴリズムオブジェクト.cpp

#include "algorithmObject.h"

algorithmObject::algorithmObject(void)
{
}

void algorithmObject::function1(int parameter)
{
//do something
}

void algorithmObject::function2()
{
//do something
}

algorithmObject::~algorithmObject(void)
{
}

ただし、GUI.h ファイルに定義を含めず、GUI の単一の関数 (algorithmObject Object1;) 内で自分の algorithmObject を定義するだけで、自分のクラスの機能に正しくアクセスできます。しかし、問題は、オブジェクトがその関数に対してローカルであり、私にとって非常に重要な GUI.cpp ファイルの他の関数からアクセスできないことです...

4

1 に答える 1

1

に含める必要があるalgorithmObject.hためgui.h、コンパイラがを使用しようとするコードを確認するまでに、クラスalgorithmObjectの宣言はすでに確認されています。algorithmObject

使用する前に常にソースファイルに含めることでこれを回避できるため、次のものが必要になります。algorithmObject.h

#include "algorithmObject.h"
#include "gui.h"

これは長い間多くのCでかなり標準的な方法でしたが、私は(個人的に)かなりエラーが発生しやすく、壊れやすいと考えています。したがって、ヘッダーが他のヘッダーに依存している場合は、ヘッダー自体が含まれていることをお勧めします。ソースファイルに含めるときに満たす必要のある前提条件はありません。

于 2012-09-24T18:32:16.277 に答える