【发布时间】:2017-05-31 12:23:39
【问题描述】:
我创建了一个名为Payload 的类,并在一个名为LineShape 的类中有一个std::vector<Payload>。我还在LineShape 中创建了一个函数,以在给定索引处从std::vector 获取Payload。这是Payload:
payload.h
class Payload {
public:
Payload (payload_type pType) {
type = pType;
}
payload_type getPayloadType() {
return type;
}
private:
payload_type type;
};
以及导致问题的函数:
LineShape.h
Payload getPayloadAt(int index) {
return transfer.at(index);
}
Visual Studio 返回以下错误:
C2334 unexpected token(s) preceding '{'; skipping apparent function body
显然,这意味着由于函数的定义,它没有将函数的主体识别为函数,但看起来没问题?
编辑:
这是LineShape 类的其余部分:
class LineShape {
public:
sf::LineShape(sf::Vector2f i_point1, sf::Vector2f i_point2, float i_thickness = 5) {
point1 = i_point1;
point2 = i_point2;
thickness = i_thickness;
vertArr.setPrimitiveType(sf::LinesStrip);
vertArr.resize(2);
vertArr[0].position = point1;
vertArr[1].position = point2;
updateShape();
}
void updateShape() {
float sX = point1.x - point2.x;
float sY = point1.y - point2.y;
float sX2 = pow(sX, 2);
float sY2 = pow(sY, 2);
float sD = abs(sqrt(sX2 + sY2));
float shapeAngle_rad = std::atan2(sY, sX);
float shapeAngle = shapeAngle_rad * 180 / PI;
float shapeLength = sf::length(sf::Vector2f(point2 - point1));
arrShape.setSize(sf::Vector2f(shapeLength, thickness));
arrShape.setPosition(point2);
arrShape.setRotation(shapeAngle);
}
sf::Vector2f getPointPosition(sf::pointNum targetPoint) {
switch (targetPoint) {
case sf::pointNum::point1: {
return point1;
}
case sf::pointNum::point2: {
return point2;
}
};
}
void setPointPosition(sf::pointNum targetPoint, sf::Vector2f position) {
switch (targetPoint) {
case sf::pointNum::point1: {
point1 = position;
}
case sf::pointNum::point2: {
point2 = position;
}
};
updateShape();
}
void setColor(sf::Color color) {
arrShape.setFillColor(color);
}
void setOutlineColor(sf::Color color) {
arrShape.setOutlineColor(color);
}
void setOutlineWidth(float width) {
arrShape.setOutlineThickness(width);
}
void draw(sf::RenderWindow &window) {
window.draw(arrShape);
}
// PAYLOADS
void addPayload(Payload payload, bool through_filter = true) {
if (through_filter) {
if (payload.getPayloadType() == transferFilter) {
transfer.push_back(payload);
}
else {
G_LOG::INCORRECT_ITEM_PASSED_TO_FILTER();
};
}
else {
transfer.push_back(payload);
};
}
Payload getPayloadAt(int index) {
return transfer.at(index);
}
std::vector<Payload> getTransfer() {
return transfer;
}
void setPayloadFilter(payload_type filter) {
transferFilter = filter;
}
private:
sf::VertexArray vertArr;
sf::RectangleShape arrShape;
std::vector<Payload> transfer;
payload_type transferFilter;
sf::Vector2f point1;
sf::Vector2f point2;
float thickness;
};`
【问题讨论】:
-
显示你所有的
LineShape。 -
你有语法错误。
-
@Alaanor 那里没有
class -
其中的许多功能(显然)与错误无关。删除它们 - 作为创建 MCVE 的第一步 - 并确认没有解决问题。如果错误消失,请一次将这些功能放回原处。如果没有,请完成制作您的 MCVE 并发布,以便人们可以实际重现您的问题。
-
这种错误通常是由编译器标记的位置 above 引起的,这意味着所有
#included 文件都可能是罪魁祸首。由于您没有显示所有代码,或者将代码减少到重现问题的最低限度,没有人可以告诉您原因是什么,除非它在您的问题中没有立即可见。
标签: c++ c++11 unexpected-token