1

オブジェクト ポインターのベクトルがあります。

std::vector<myObject *> listofObjects;

そして、それらにアクセスする必要がある別のオブジェクトにそれらを渡したいと思います。

次のようなことをしようとすると:

class NeedsObjects 
{
 public:
    NeedsObjects(std::vector<myObject *> &listofObjects)
 private:
    std::vector<myObject *> &listofObjects;
};

そして、初期化リストでベクトルを初期化します。次のエラーが発生します。

'myObject' was not declared in this scope
template argument 1 is invalid
template argument 2 is invalid

私は何を間違っていますか?私がやりたいことは、ベクトルを NeedsObjects クラスに渡すことだけです。

4

3 に答える 3

5

そのオブジェクトへのポインターを使用するため、完全なオブジェクト構造を定義する必要はありません。使用する前にこのファイルで宣言するだけです。

class myObject; // pre declaration, no need to know the size of the class
class NeedsObjects 
{
 public:
    NeedsObjects(std::vector<myObject *> &listofObjects)
 private:
    std::vector<myObject *> &listofObjects;
};
于 2013-04-18T06:54:49.790 に答える
3

コンパイラに何が何であるかを伝えないmyObjectため、コンパイラはstd::vector. -fileを使用して参照を追加するか、この翻訳単位で.h定義してください。myObject

どちらか

#include "myObject.h"

class NeedsObjects 
{
 public:
    NeedsObjects(std::vector<myObject *> &listofObjects)
 private:
    std::vector<myObject *> &listofObjects;
};

myObject別のヘッダーで定義した場合

また

class myObject {
//declaration goes here
};

class NeedsObjects 
{
 public:
    NeedsObjects(std::vector<myObject *> &listofObjects)
 private:
    std::vector<myObject *> &listofObjects;
};
于 2013-04-18T06:45:42.720 に答える
3

ご覧のとおり、コードに myOpbject 型の宣言が表示されていません。

基本的に 2 つのオプションがあります。

a) myObject を完全に宣言するヘッダーをインクルードします。

#include "myObject.h" // ... or something near to this.

b) myObject がクラスだとしましょう。ここで提供したコード (少なくとも宣言部分) は、実際には myObject のサイズを知る必要がないため、myObject がクラスであることを宣言するだけで、別の場所で宣言できます。

class myObject;
于 2013-04-18T06:54:30.477 に答える