Ошибка для геттеров и сеттеров - PullRequest
1 голос
/ 11 апреля 2011

У меня есть вектор вершин, и я хочу установить для vertice.setVisit значение false или 0 изначально.Для этого я определил некоторые методы получения и установки, но получаю ошибку типа.Код приведен ниже:

//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 = mark "and for" this.num = num "в определении функции в классе.

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

Разве это не правильный способ присвоения значений через методы получения и установки?

Ответы [ 3 ]

6 голосов
/ 11 апреля 2011

В C ++ this является типом указателя.Попробуйте this->mark или (*this).mark

РЕДАКТИРОВАТЬ: Как указал Ричард ниже, также не забудьте назвать ваши параметры, которые вы пытаетесь назначить.В контексте this->mark = mark - это то же самое, что и this->mark = this->mark.Если mark не является параметром, this действительно не требуется в этом случае.Реально, вы можете избавиться от this все вместе в вашем примере, выполнив что-то вроде этого:

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

С уважением,Деннис М.

3 голосов
/ 11 апреля 2011

Измените setNum и setVisit на следующее

void setNum(int num) {this->num = num; }
void setVisit(int mark) {this->mark = mark; }
2 голосов
/ 11 апреля 2011

this - указатель, поэтому вы должны использовать this->num.

...