2011-04-11 118 views
1

我有一個向量的頂點,我希望將vertice.setVisit設置爲false或0。我爲此定義了一些getter和setter,但是得到了一些類型錯誤。代碼是按如下:getter和setter錯誤

//Vector: 
std::vector<project3::Vertex<VertexType, EdgeType>*> Vertice1; 

//Class containing methods: 
template <class VertexType, class EdgeType> class Vertex{ 
protected: 
    //std::vector<std::pair<int, EdgeType>> VertexList; 
    VertexType vertice; 
    EdgeType edge; 
    int num; 
    int mark; 
    //int status=0; 

public: 

    void setNum(int){ this.num = num; } 
    int getNum() { return num; } 
    int getMark(){ return mark; } 
    void setVisit(int) { this.mark = mark; } 
}; 

在某些功能,我爲分配值給它:

for(int i=0; i<g1.Vertice1.size(); i++) 
{ 
    g1.Vertice1.at(i)->setNum(0); 
    g1.Vertice1.at(i)->setVisit(0); 
} 

下面是我得到的錯誤,而代碼的編制「this.mark =標記「和」this.num = num「在類的函數定義中。

Error: left of '.mark' must have class/struct/union 
Error: left of '.num' must have class/struct/union 

這不是分配通過getter和setter方法值的正確方法是什麼?

回答

6

在C++中,this是一個指針類型。嘗試this->mark(*this).mark

編輯:正如理查德低於所指出的,也一定要命名參數,你想分配。在上下文中,this->mark = markthis->mark = this->mark相同。除非mark是參數,否則在這種情況下this確實是不必要的。所以實際上,你可以得到你的例子做這樣的事情擺脫this一起:

void setVisit(int newMark) { mark = newMark; } 

問候,
丹尼斯M.

+0

哦~~爽....它的工作。實際上在Java中,它就像this.mark = mark,因此正在嘗試。謝謝反正提供快速解決方案:) – 2011-04-11 01:16:25

+0

沒問題!我用一點點信息附加了答案。祝你好運! – RageD 2011-04-11 01:17:49

+0

@tech_learning:如果你已經給出了成員函數參數名稱「mark」,那麼這也適用於這裏(當然,用'this->'而不是'this.')。但是,您離開參數未命名。 – ildjarn 2011-04-11 01:40:22

2

this是一個指針,所以你必須使用this->num

3

變化setNum和setVisit以下

void setNum(int num) {this->num = num; } 
void setVisit(int mark) {this->mark = mark; }