2012-10-30 17 views
0

我有一個基類如STL列表:如何在功能作爲參數傳遞C++

class Base 
{ 
public: 
    virtual void fun() const =0; 
}; 

class Derived: public Base 
{ 
    virtual void fun() 
    { 
     //implemtation of fun 
    } 
}; 

我有一個全球性的結構:

struct Mystruct { 
    int a; 
    char *b; 
} MYSTRUCT; 

然後,我添加結構到矢量:

List = new MYSTRUCT; 
vector<MYSTRUCT*> SS; 
SS.push_back(List); 

我該如何將這個向量傳遞給fun函數並訪問函數中的struct?

+2

這裏沒有「列表」。而且由於我已經評論過了,這裏也沒有「STL」,並且你的函數缺少一個'()',並且當把適當的努力放入它時,英文單詞'I'被大寫,我可以去關於這個問題的其他一些問題,但人們不喜歡我進行rafefest。 –

+0

無需downvote!這是一個法律問題,即使OP有理解C++用法的困難。 (@LightnessRacesinOrbit注意:我不是在提問到'平衡') –

+0

下決心應該考慮編輯問題以獲得樣本中一些合理的C++代碼,或至少留下他們的理由的評論... –

回答

1

你似乎搞不清這是什麼意思:

struct Mystruct 
{ 
int a; 
char *b; 
}MYSTRUCT; 

這是一個結構的聲明稱爲Mystruct稱爲MYSTRUCTMystruct一個實例。所以,當你創建std::vectorsstd::lists持有這些結構,您需要使用作爲模板參數:

std::vector<Mystruct> v0; // vector holding 0 Mystructs 

如果你想保持指針的向量,則需要

std::vector<Mystruct*> v1; 

這將根本不編譯,因爲MYSTRUCT不是一種類型:

std::vector<MYSTRUCT*> 
1

就像這樣:

class Base 
{ 
public: 
    virtual void fun(const std::vector<Mystruct*>& list) const =0; 
}; 

class Derived:public Base 
{ 
public: 
    virtual void fun(const std::vector<Mystruct*>& list) 
    { 
     //implemtation of fun 
    } 
}; 

但你的樣本顯示,你可能有理解如何設計C++類的其他問題(例如,您不需要使用該C一樣的結構定義的語法與C++)。

+1

'MYSTRUCT'不是一個類型。 – juanchopanza

+0

@juanchopanza你是對的。我沒有試着去s.th.編譯。只是想將OP指向某個'方向'... –