如何将点添加到结构类型的向量中

时间:2014-11-16 00:31:39

标签: c++ vector stl

我正在尝试将点(顶点)添加到struct类型的向量中。我是初学者,我知道我可以使用push_back。但我一直有三个错误:

  • 没有合适的默认构造函数
  • '.push_back'左边的
  • 必须有class / struct / union
  • 表达式必须具有类类型。

我做错了什么? 这是我的代码......

#include "stdafx.h"
#include <vector>
#include <iostream>
#include <math.h>
using namespace std;

struct Points
{
    int x, y;
    Points(int paramx, int paramy) : x(paramx), y(paramy) {}  
}p1,p2;

vector <Points> pointes();

void addPoint(int a, int b);
void directionPoint(Points p1, Points p2);

int main()
{
    return 0;
}

void addPoint(int x, int y)
{
    pointes.push_back(Points(x, y));    
}

void directionPoint(Points p1, Points p2)
{  
    if ((p1.x*p2.y - p2.x*p1.y) > 0)
    {
        cout << "direction is anticlockwise" << endl;
    }
    else
        cout << "direction is clockwise" << endl;
}

2 个答案:

答案 0 :(得分:1)

std::vector并不要求其值类型是默认可构造的。编译错误的原因是不同的:

struct Points
{
  //...
}p1,p2;

您声明p1p2没有参数。要做到这一点struct Points必须有一个默认的构造函数。您必须删除它们或指定构造函数的参数。

此外,

vector <Points> pointes();

这声明一个函数pointes不带参数并返回vector<Points>。将其声明为vector <Points> pointes;

在这两次更改之后,代码会编译:Demo

答案 1 :(得分:1)

错误没有合适的默认构造函数是由您的代码

引起的
} p1,p2;

这可以通过在结构中创建适当的构造函数,在不需要时删除这些值或使用现有构造函数来更正:

} p1(0,0),p2(0,0);

'.push_back'的左边必须有class / struct / union,而expression必须有类类型错误是由

引起的
vector <Points> pointes();

要更正它,请删除括号:

vector <Points> pointes;