【问题标题】:Accessing a method from an object [duplicate]从对象访问方法[重复]
【发布时间】:2016-05-01 21:47:53
【问题描述】:

我有一个简单的问题。如果我的类有其他类对象的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++ 给了我这个:

将其更改为 it-&gt;getLabel() 给了我这个:

我怎样才能让它工作?

【问题讨论】:

  • 不要在您的问题中发布屏幕截图。而是复制并粘贴错误消息。
  • 如何从cmd复制粘贴?
  • @LogicStuff 我认为您的第一个不起作用; -&gt; 的优先级高于 *

标签: c++ class pointers


【解决方案1】:
for (auto it=dataset.vectorOfSamples.begin(); it!=dataset.vectorOfSamples.end(); it++)
{
    std::cout<<(*it)->getLabel()<<std::endl;
}

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

【讨论】:

    猜你喜欢
    • 2013-01-31
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多