输入代码时出错,即使我有头文件

时间:2014-12-15 02:06:07

标签: c++ compiler-errors

我尝试运行我制作的程序,但由于某种原因,我在运行程序时遇到错误。错误与cin>> x>>你的一部分。我现在的主要问题是我不知道如何通过人工输入将内容输入到矢量中。我遇到的错误是此行的多个标记     -y请求y中的成员y,这是非类的      输入int      - 请求x中的成员x,这是非类的      输入int 提前致谢。

#include <iostream>
#include <vector>

using namespace std;
struct Point {
    int x, y;
};
int manhattan_dist(const Point& p, const Point& q) {
    return abs(p.x - q.x) + abs(p.y - q.y);
}
int main (int argc, char ** argv)
{
    Point x,y;
    Rd("marathon.in");
    Wt("marathon.out");
    int checkpoints;
    vector<Point> points(checkpoints);
    int largestdistance=0;
    int sum=0;
    cin >> checkpoints;
    for (int i=0; i<checkpoints; i++){
        for (int j=0; j<2; j++){
            cin >> x >> y;
        }
    }
    for (int i = 0; i < checkpoints - 1; ++i) {  // stop before c-1, so i and i+1 are valid
        sum += manhattan_dist(points[i], points[i+1]);
    }

    if (sum > largestdistance){
        largestdistance=sum;
    }
    cout << largestdistance << '\n';
    return 0;
}

2 个答案:

答案 0 :(得分:3)

您可以定义operator>>应如何适用于您的自定义类型。为此,你需要超载它。如果您希望cin中的第一个号码转到Point::x而另一个号码转到Point::y,则以下内容应该有效:

std::istream& operator>>(std::istream& in, Point& p) {
    return in >> p.x >> p.y;
}

然后

Point p;
std::cin >> p;

会奏效。然后你可以将它推回points向量。看来你正试图从stdin中读取一堆点并将它们推入向量中。如果那是演员表,那么你需要坐在一个循环中。

std::vector<Point> points;
Point p;
while (std::cin >> p) {
    points.push_back(p);
}

或者,如果checkpoints变量应该初始化为points向量的大小

std::vector<Point> points(checkpoints);
for (std::size_t i = 0; i < points.size(); ++i) {
    std::cin >> points[i];
}

答案 1 :(得分:3)

应该更正为

cin >> x.x >> y.y;

您正在访问自定义的结构体。没有为你的struct定义std :: cin! 如果您需要以这种方式使用它,您将不得不进行操作员过载。