2011-04-11 122 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; }