Тип класса Line не называет тип

у меня есть проблема с типами во время присвоения, например, у меня есть точка типа

class point:public pair<int, int>
{
private: int index;
public: point(int);

point(int, int, int);

int GetIndex();

float GetDiff(point);

};

point::point(int Index): index(Index) {};

point::point(int x, int y, int Index): index(Index)
{
first = x;
second = y;
}

int point::GetIndex()
{
return index;
}

float point::GetDiff(point Point)
{
return pow(pow(Point.first-first,2.0f) + pow(Point.second-second,2.0f),0.5f);
}

это правильно скомпилировать, и работать хорошо [я думаю)] но когда я хочу использовать его, я получаю сообщение об ошибке, это код, который использует этот класс (точка)

class Line
{
public:
Line();
point firstPoint;
point secondPoint;
};
Line::firstPoint = point(0); // i get error, same as on line 41
//and for example

struct Minimal
{
Minimal();
Line line();
void SetFirstPoint(point p)
{
line.firstPoint = p;//41 line, tried point(p), same error.
UpdateDist();
}
void SetSecondPoint(point p)
{
line.secondPoint = p;
UpdateDist();
}
void UpdateDist(void)
{
dist = line.firstPoint.GetDiff(line.secondPoint);
}
float dist;
};

[/ NOEDIT] и где ошибка, которую выдает мне компилятор gcc

|41|error: 'firstPoint' in 'class Line' does not name a type|

0

Решение

Обратите внимание, что эта строка:

Line line();

Не объявляет переменную-член типа Line, а скорее функция называется line который возвращает объект типа Line, Поэтому либо этот код:

line.firstPoint = p;

Предполагается, что будет следующим (что не имеет большого смысла, потому что вы будете изменять временный):

line().firstPoint = p;

Или (скорее всего) приведенное выше объявление просто должно быть:

Line line; // Without parentheses

Более того, причина, по которой вы получаете ошибку здесь:

Line::firstPoint = point(0);

В том, что firstPoint это не static переменная-член класса Line, Вам сначала нужно пример из Line чья firstPoint член, который вы могли бы изменить.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]