【问题标题】:how to access to a vector in the class from a function that belongs to that class in C++如何从 C++ 中属于该类的函数访问类中的向量
【发布时间】:2021-12-20 17:49:07
【问题描述】:

我是 C++ 新手。我创建了一个 cpp 和一个头文件。这是头文件:

class LISCH{
public:                 
    class lisch_entry{
    public:
        bool valid;
        int link;
        int data;

        lisch_entry(){
            valid = false;
        }
    };

    vector<lisch_entry> data_vec;


public:

    LISCH(int);
    void insert(int);
    

};

在 cpp 文件中,我需要在插入函数中访问该 data_vec 向量,但我不能这样做,因为这是我第一次用 C++ 编码。这是cpp文件:

#include "lisch.h"
#include <iostream>

using namespace std;

LISCH::LISCH(int table_size){
   table_size=10;
   int x=5;    
}


void LISCH::insert(int new_data){
   
   
   
   lisch_entry entry;
   int add=new_data%11;
   if(LISCH.data_vec[add] == NULL) //here i need to acces data_vec
   {
       
   }
   data_vec.insert(add,new_data); //and also here

}

我怎样才能做到这一点?我需要检查向量的特定位置是否为空。

【问题讨论】:

  • data_vec.insert 应该可以工作。如果没有,请创建一个minimal reproducible exampleLISCH.data_vec 不会,如果您想明确说明,请使用 this-&gt;data_vec
  • 什么是table_size?您只需获取参数,然后将 10 分配给它 - 然后它就被遗忘了。
  • 向量是空的,data_vec[add] 对于add 的任何值都会表现出未定义的行为。不确定“检查向量的特定位置是否为空”是什么意思 - 空向量没有位置,并且不清楚 lisch_entry 的实例为“空”意味着什么。
  • 我怀疑您希望构造函数使用table_size 元素构造一个向量,例如LISCH::LISCH(size_t table_size) : data_vec(table_size) {} ?此外,余数运算应该是size_t add = new_data % (data_vec.size() + 1); - 但add 应该用于什么,我不知道。
  • “我做不到”不是问题描述。如果您遇到任何问题,请在问题中包含编译器错误

标签: c++ class oop vector


【解决方案1】:

代码有很多问题,可能是由于缺乏计划或制定所需的效果。

using namespace std;  // never do this in real programs. 
                      // Even some tests may fail accidently. 

LISCH::LISCH(int table_size){
   table_size=10;  // those are local variables, why assigning values to them?
   int x=5;    
}

data_vec被定义为lisch_entry的向量:

   vector<lisch_entry> data_vec;

lisch_entry 类型的 you out of blue 访问元素,索引为 add。你已经分配了那么多元素了吗?它可能根本不存在,程序会崩溃:

   if(LISCH.data_vec[add] == NULL) 

实例 lisch_entry 不能相等,不能与您定义的 NULL 进行比较。检查本身看起来很可疑,你想做什么?

  data_vec.insert(add,new_data);

insert 接收一个迭代器作为第一个参数。整数值不是迭代器。 add-th 元素的迭代器值的迭代器是 data_vec.begin() + add。看来必须查看std::vector 上的文档。

您可以在此处找到简写文档:https://en.cppreference.com/w/cpp/container/vector

如果您想自学 C++,这可能会有所帮助:https://isocpp.org/faq

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 2020-12-16
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    相关资源
    最近更新 更多