将向量声明为类成员

declaring a vector as a class member

本文关键字:成员 声明 向量      更新时间:2023-10-16

我在头文件中有一个简单的类: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.

将这里的向量声明为成员有什么问题?

您需要#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 

其他要点:

  • (正如EitanT所评论的)我取消了建造师的附加资格a::
  • 读一读"为什么";使用命名空间std";被认为是不好的做法

将向量声明为类成员:

#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;
}

1.您需要#include <vector>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;

一样