3

ヘッダー ファイルに単純なクラスがあります: a.hh

#ifndef a_hh
#define a_hh

class a
{
public: 
    int i;
    a()
    {
        i = 0;
    }

};
#endif

次に、ファイルがあります:b.cc

#include <iostream> 
#include "a.hh"

using namespace std;

int main(int argc, char** argv)
{

    a obj;
    obj.i = 10;
    cout << obj.i << endl;
    return 0;
}
> 

この時点まではすべて問題ありません。コードをコンパイルすると、正常にコンパイルされます。しかし、クラスにベクトルを追加するとすぐに:

#ifndef a_hh
#define a_hh

class a
{
public: 
    int i;
    vector < int > x;
    a()
    {
        i = 0;
    }

};
#endif

以下のようなコンパイル エラーが発生します。

> CC b.cc
"a.hh", line 7: Error: A class template name was expected instead of vector.
1 Error(s) detected.

ここでベクトルをメンバーとして宣言する際の問題は何ですか?

4

3 に答える 3

5

#include <vector>修飾名を使用する必要がありstd::vector<int> x;ます。

#ifndef a_hh
#define a_hh

#include <vector>

class a{
public:
    int i;
    std::vector<int> x;
    a()             // or using initializer list: a() : i(0) {}
    {
        i=0;
    }
};

#endif 

その他のポイント:

于 2012-09-03T07:31:48.637 に答える
1

ベクトルをクラス メンバーとして宣言します。

#include <iostream>
#include <vector>
using namespace std;

class class_object 
{
    public:
            class_object() : vector_class_member() {};

        void class_object::add_element(int a)
        {   
            vector_class_member.push_back(a);
        }

        void class_object::get_element()
        {
            for(int x=0; x<vector_class_member.size(); x++) 
            {
                cout<<vector_class_member[x]<<" \n";
            };
            cout<<" \n";
        }

        private:
            vector<int> vector_class_member;
            vector<int>::iterator Iter;
};

int main()
{
    class_object class_object_instance;

    class_object_instance.add_element(3);
    class_object_instance.add_element(6);
    class_object_instance.add_element(9);

    class_object_instance.get_element();

    return 0;
}
于 2012-09-03T09:09:27.430 に答える
-1

#include <vector>1.次のようにand を実行しusing namespace std、次に a.hh を実行する必要があります。

#ifndef a_hh
#define a_hh

#include <vector>
using namespace std;

class a
{
public: 
    int i;
    vector <int> x;
    a()
    {
        i = 0;
    }

};
#endif

2. すべてのコードで std 名前空間のみを使用したくない場合は、型の前に名前空間を指定できます。 std::vector<int> x;

于 2012-09-03T07:45:50.620 に答える