2013-11-28 2 views
-1

У меня есть следующий класс:Почему итераторы несовместимы?

class Manifest { 
public: 
    Manifest(void); 
    ~Manifest(void); 

    std::vector<ManifestDirectory> get_directories() const { return directories_; } 
    void set_directories(std::vector<ManifestDirectory> dirs) { directories_ = dirs; } 
    int ReadManifest(Manifest &manifest); 

private: 
    std::vector<ManifestDirectory> directories_; 
}; 

и после упрощенного использования:

Manifest manifest; 
manifest.ReadManifest(manifest); 

for (std::vector<ManifestDirectory>::iterator it = manifest.get_directories().begin(); it != manifest.get_directories().end(); ++it) { 
    // Do something 
} 

как изменить get_directories(), поэтому он не будет копировать весь directories_ и it в течение цикла будет указывать тот же directories_.begin()?

В настоящее время итератор несовместим сбрасывается.

+5

Возврат ссылки 'std :: vector & get_directories() const {return directories_; } ' –

+0

@RogerRowland Может быть, я должен сделать directories_ указателем и изменить get & set? Конечно, возвращение справки теперь работает - спасибо. – PawelZ

+0

Что делать, если я не хочу, чтобы 'directories_' изменен снаружи, и только' ReadManifest() 'сможет это сделать и методы' Manifest'? – PawelZ

ответ

0

Если вы не хотите, каталогов, измененных за пределами get_directories(), возвращает константный реф:

const std::vector<ManifestDirectory>& get_directories() const { return directories_; } 

Но убедитесь, что вы создаете константные итераторы.

Смежные вопросы