3

基本クラスへのポインターを介してアクセスされるいくつかの派生クラスを持つアプリケーションを作成しています。これらの派生クラスの 1 つに、次のように、アプリケーション内の隣接する (基本クラス型の) ポインターのベクトルを含めることを望みます。

    #include <vector>

    class BaseClass
    {
    public:
        BaseClass() { }
        virtual ~BaseClass() { }
    };

    class DerivedClass : virtual public BaseClass
    {
    public:
        DerivedClass() : BaseClass() { }
        ~DerivedClass() { }
    private:
        vector<BaseClass*> Neighbors;
    };

ただし、次のコンパイラ エラーが発生します。

example.cpp:16: error: ISO C++ forbids declaration of ‘vector’ with no type
example.cpp:16: error: expected ‘;’ before ‘&lt;’ token

これは可能ですか?可能であれば、誰かが私の間違いを指摘してください! コンパイラは、宣言されたばかりの BaseClass の型を認識している必要があります。実際、型のメンバーの宣言はBaseClass Foo;機能するため、ベクトルが BaseClass* を認識できない理由がわかりません。

乾杯!

4

2 に答える 2

5

using namespace std;using std::vector、またはのいずれも入れていませんstd::vector<...>...

#include <vector>
using std::vector; //choice 1
using namespace std; //choice 2 

class BaseClass
{
public:
    BaseClass() { }
    virtual ~BaseClass() { }
};

class DerivedClass : virtual public BaseClass
{
public:
    DerivedClass() : BaseClass() { }
    ~DerivedClass() { }
private:
    std::vector<BaseClass*> Neighbors; //choice 3
};
于 2012-04-22T15:58:16.270 に答える
1

回答 #1 に対するコメントを意図しています: ヘッダー ファイルでの "using ..." 宣言は避ける必要があります。それらを実装ファイル (.cpp) 内に保持します。Google のスタイル ガイドラインには、元の投稿者と回答者が役立つと思われる追加情報が記載されています: http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Namespaces。Google のスタイル全体を支持するわけではありません。

于 2012-04-22T16:13:49.503 に答える