我正在尝试将点(顶点)添加到struct类型的向量中。我是初学者,我知道我可以使用push_back。但我一直有三个错误:
我做错了什么? 这是我的代码......
#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;
}
答案 0 :(得分:1)
std::vector
并不要求其值类型是默认可构造的。编译错误的原因是不同的:
struct Points
{
//...
}p1,p2;
您声明p1
和p2
没有参数。要做到这一点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;