1

任何人都可以帮助我将一组类传递给另一个类的语法。将一组类传递给另一个类的语法让我被打败了。类行尝试由点数组初始化,但原型不匹配。

#include    <iostream>
using namespace std;
class point {
public:
    point() {}
    point(int x, int y) : X(x), Y(y) {}
    void setXY(int x, int y) { X = x; Y = y; }
    int getX() { return X; }
    int getY() { return Y; }
private:
    int X, Y;
};
class line {
public:
    line(point *points, int);  // Problem line.
private:
    point *coords;
    int numpoints;
};
int main() {
    point   points[3];
    points[0].setXY(3, 5);
    points[1].setXY(7, 9);
    points[2].setXY(1, 6);

    line    l(points, 3);    // Problem line.
    return 0;
}

错误消息:cygdrive/c/Tmp/cc4mAXRG.o:a.cpp:(.text+0xa7): undefined reference to `line::line(point*, int)'

4

3 回答 3

2

你需要为你的 line 类定义一个构造函数——你只提供了一个声明。

#include    <iostream>
using namespace std;
class point {
public:
    point() {}
    point(int x, int y) : X(x), Y(y) {}
    void setXY(int x, int y) { X = x; Y = y; }
    int getX() { return X; }
    int getY() { return Y; }
private:
    int X, Y;
};
class line {
public:
    line(point *points, int count)
     : coords(points), numpoints(count) {}
private:
    point *coords;
    int numpoints;
};
int main() {
    point   points[3];
    points[0].setXY(3, 5);
    points[1].setXY(7, 9);
    points[2].setXY(1, 6);

    line    l(points, 3);
    return 0;
}

我建议看一下定义和声明之间的区别。此外,您应该考虑std::vector<point>line课堂上维护一个来管理分数。然后,您的线路类可能表现为:

#include <vector>
class line {
public:
    line(std::vector<point> points)
     : coords(points), numpoints(coords.size()) {}
private:
    std::vector<point> coords;
    int numpoints;
};
于 2013-09-18T02:05:45.353 回答
0

缺少构造函数“行”的主体。您只定义原型。

于 2013-09-18T02:09:16.697 回答
0

您没有为构造函数提供定义。

尝试:

line(point *points, int np) : coords(points), numpoints(np) {}
于 2013-09-18T02:05:45.320 回答