0

分配时类型有问题,例如我有类型点

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;
};

给我 gcc 编译器的错误在哪里

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

1 回答 1

0

请注意这一行:

Line line();

不声明类型的成员变量Line,而是声明一个line返回类型对象的函数Line。因此,无论是这段代码:

line.firstPoint = p;

意味着如下(这没有什么意义,因为你会修改一个临时的):

line().firstPoint = p;

或者(很可能)上面的声明只是意味着:

Line line; // Without parentheses

此外,您在这里收到错误的原因:

Line::firstPoint = point(0);

firstPoint不是staticclass 的成员变量吗Line?您首先需要一个可以修改其成员的实例LinefirstPoint

于 2013-03-02T14:56:02.610 回答