-1

これが私の状況です。以下のように、ベクトルをパブリックに定義したクラスがあります。

class TrackObjects
{
public:

    vector<MovingObj> movingObjects;

...

コンストラクタとすべてがあります。そのベクターとそのベクターのメソッドを使用しようとしているいくつかの実装を含む別の .cpp ファイルがあります。一例として、次のような関数の条件の一部です。

if (movingObjects.locX >= x1)

...

それは、movingObjects が宣言されていないこと、および最初にこの関数を使用することを教えてくれます。これは関数ではありません。私の知る限り、関数のように呼び出したことはありません/関数のように使用しようとしました。

このエラーが発生する理由を誰かが提案できますか?

編集: locX は、別のクラス MovingObj のパブリック変数です。TrackObj は、MovingObj が作成するオブジェクトのベクトルを作成するクラスです。申し訳ありませんが、私は本当にそれを指定する必要がありました. そのようです:

クラスMovingObj {

公衆:

MovingObj(int inId, int inLocX, int inLocY, int inWidth, int inHeight);

int id、locX、locY、幅、高さ;

4

2 に答える 2

1

あなたが私たちに言っていることに基づいて、locXにアクセスする適切な方法は次のようなものです:

TrackObjects objs;
objs.movingObjects[15].locX = 123.45; 

または多分:

if(objs.movingObjects[15].locX >= 15)
{
    //do something
}

アクセス メソッドを TrackObjects にカプセル化することもできます (これを TrackObjects.cpp 実装に入れます)。

bool TrackObjects::testLocX(int pos)
{
if(movingObjects[pos].locX>=15)
   return true;
return false;
};
于 2013-05-19T00:18:29.193 に答える
0

これは基本的な C++ の問題です。movingObjects はオブジェクトの一部です。TrackObjects クラスの一部ではないコードは、アクセスするオブジェクトの movingObjects を指定することによってのみ、movingObjects にアクセスできます。

if (someobject.movi​​ngObjects.size() > 0) ...

もう 1 つの問題は、別の cpp ファイルからそのようなオブジェクトにアクセスするには、最初にクラス定義を含むファイルを #include する必要があることです。

于 2013-05-19T00:23:37.407 に答える