从对象访问方法

时间:2016-05-01 21:47:53

标签: c++ class pointers

我有一个简单的问题。如果我的类有vector个其他类对象,并且我想访问其中一个对象中的方法但不使用[]运算符,那么我该怎么做呢?我有这样的代码:

#include <iostream>
#include <vector>

class Sample
{
    int label;
    std::vector<int> int_vector;
public:
    int getLabel()
    {
        return label;
    }
    void writeDown()
    {
        int i=0;
        for(auto it=int_vector.begin(); it!=int_vector.end();it++,i++)
        {
            std::cout<<(*it)<<std::endl;
        }  
    }
    Sample(int label, int tab[10])
    {
        int i=0;
        this->label=label;
        for(int i=0; i<10; i++)
        {
            int_vector.push_back(tab[i]);
        }
    }
    ~Sample()
    {
        std::cout<<"Object has been removed"<<std::endl;
    }
};

class Dataset
{
public:
    std::vector<Sample *> vectorOfSamples;
    Dataset(Sample *sample)
    {
        vectorOfSamples.push_back(sample);
    }
};    




int main(int argc, char** argv)
{
    int tab[10] = {1,2,3,4,5,6,7,8,9,10};
    Sample sample(5,tab);
    Dataset dataset(&sample);
    for (int i=0; i<5; i++)
    {
        dataset.vectorOfSamples.push_back(new Sample(i, tab));
    }
    for (auto it=dataset.vectorOfSamples.begin(); it!=dataset.vectorOfSamples.end(); it++)
    {
        std::cout<<it.getLabel()<<std::endl;
    }
    return 0;
}

当我这样做时,g++给了我这个:

enter image description here

将其更改为it->getLabel()会给我这个:

enter image description here

我怎样才能让它发挥作用?

1 个答案:

答案 0 :(得分:2)

for (auto it=dataset.vectorOfSamples.begin(); it!=dataset.vectorOfSamples.end(); it++)
{
    std::cout<<(*it)->getLabel()<<std::endl;
}

你必须取消引用你的迭代器。