2013-11-28 198 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_,並在for循環it將指向相同directories_.begin ()?

現在迭代器不兼容被拋出。

+5

返回一個引用'std :: vector &get_directories()const {return directories_; }' –

+0

@RogerRowland也許我應該讓目錄_一個指針並修改get&set?當然,返回參考正在工作 - 謝謝。 – PawelZ

+0

如果我不想在外面修改'directories_'並且只有'ReadManifest()'能做到'Manifest'的方法和方法? – PawelZ

回答

0

如果你不希望的get_directories()外部修改的目錄,返回一個const裁判:

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

但要確保你創建常量迭代器。

相關問題