2012-09-29 29 views
0

我已經編寫了一個包裝類來對類型向量執行插入/刪除操作。 代碼:檢索C++向量中的第一個元素

class GenericSymbolTable { 
    public: 
     virtual void pushBackAtom(Atom *atom) = 0; 
     virtual Atom* peekAtom(void) = 0; 
     virtual Atom* getAtom(void) = 0; 

    protected: 
     ~GenericSymbolTable(void){} 
}; 

class SymbolTable : public GenericSymbolTable { 
    private: 
     vector<Atom*> atoms; 

    protected: 
     ~SymbolTable(void); 

    public: 
     void pushBackAtom(Atom *atom); 
     Atom* peekAtom(void); 
     Atom* getAtom(void); 
}; 

當寫爲這些方法編譯器會引發衝突的類型錯誤的實現:

Atom* SymbolTable::peekAtom(void) { 
     if(atoms.empty()) { 
      cout << "\t[W] Simbol table does not contain any atoms" << endl; 
      return NULL; 
     } 

     Atom* first = atoms.begin(); // <== type error 
     return first; 
    } 

    Atom* SymbolTable::getAtom(void) { 
     if(atoms.empty()) { 
      cout << "\t[W] Simbol table does not contain any atoms" << endl; 
      return NULL; 
     } 

     Atom* first = atoms.begin(); // <== type error 
     atoms.erase(atoms.begin()); 
     return first; 
    } 

錯誤消息: 不能轉換「的std ::矢量:迭代{又名__gnu_cxx: :__ normal_iterator>}」到 '在初始化原子*'

+0

迭代器可以並且很可能不是指針類型。 – Xeo

回答

4
Atom* first = atoms.begin(); // <== type error 

這設置first等於迭代器。你想設置它等於迭代器指向的對象。嘗試:

Atom* first = *(atoms.begin()); 

或:

Atom* first = atoms.front(); 

由於這是的Atom*的載體,它的迭代器指向Atom*秒。

+0

謝謝;已經糾正它(使用第一個)。 – Sebi

3

std::vector::begin不返回矢量的第一個元素,它返回一個可用於遍歷矢量的迭代器(指向第一個元素)。

您正在查找的方法很可能是std::vector::front()

相關問題