c++声明向量数组以获取类,但不能访问成员变量

c++ declare vector array to get a class, but cannot access member variable

本文关键字:但不能 访问 成员 变量 获取 声明 向量 数组 c++      更新时间:2023-10-16

当我声明vector以获取类,但不能访问成员变量时。

代码有更多详细信息,

class test{
  public :
    int num;        //member variable
    test(int k){    //constructor
      num=k;
    }
};
int main(){
  vector<test *> a[10];  //declare vector 
  for(int i=0;i<10;i++)
     a.push_back(new test(p));  //use constructor initial
  for(int i=0;i<10;i++)
     cout<<a[i].num<<endl;  //THIS STEP ERROR, 'NO MENBER num'
}

我找不到解决办法。QAQ~

class test{
  public :
    int num;        //member variable
    test(int k){    //constructor
      num=k;
    }

如果所有成员都是公开的,为什么不使用struct
此外,该ctor调用一个ctorinit列表,如下所示:

struct test{
    int num;
    test(int num) : num(num) {}
};
int main(){
  vector<test *> a[10];  //declare vector 

谎言在广告中,你实际上是在定义,以及一个由十个向量组成的数组。

  vector<test*> a; // This is a vector of pointers to test
  for(int i=0;i<10;i++)
     a.push_back(new test(p));  //use constructor initial
  for(int i=0;i<10;i++)
     cout<<a[i].num<<endl;  //THIS STEP ERROR, 'NO MENBER num'
}

a[i]属于test*类型,指针不具有成员。您希望使用箭头运算符->

     cout<<a[i]->num<<endl;

最后,你忘了删除所有分配的内存。

解决方案:

  1. 不要分配动态内存,而是直接存储test-对象。

    vector<test> a; // This is a vector of test
    for(int i=0;i<10;i++)
        a.push_back(test(p));  //use constructor initial
    for(int i=0;i<10;i++)
        cout<<a[i].num<<endl;
    
  2. 使用智能指针(<memory>):

    vector<std::unique_ptr<test>> a; // This is a vector of std::unique_ptr<test>
    for(int i=0;i<10;i++)
        a.push_back(new test(p));  //use constructor initial
    for(int i=0;i<10;i++)
        cout<<a[i]->num<<endl;
    
  3. 添加所有手动内存管理,但记住所有分配都可以抛出
    太长,容易出错,不会写

您已经声明了一个向量数组:
std::矢量<>a[10];一个由10个矢量组成的数组。

数组中的每个槽都是指向测试类的指针的向量:

  std::vector<Test *> a[10];

因此,要访问Test项,您需要找出要访问的数组元素以及该项在数组中的位置:

  Test p_object = 0;
  p_object = a[3].[2]; // The fourth vector, the third slot in the fourth vector.
  std::cout << "Test item from 3rd slot in 4th vector: "
            << p_object->num
            << "n";

我不认为这是你需要或想要的。代码显示的图片类似于二维矩阵。通常,2d矩阵被声明为向量的向量或2d数组;而不是两者的结合。

相关文章: