gpt4 book ai didi

c++ - 头文件没有看到其他头标识符

转载 作者:太空宇宙 更新时间:2023-11-04 13:41:08 24 4
gpt4 key购买 nike

我一直在使用 Visual Studio 2013 时遇到问题。我无法解释为什么会这样。编译问题如下图所示。
我有一个使用类“RigidBody.cpp/h”的类“PhysicsEngine.cpp/h”就好了。一旦我尝试在我的 Character 类 header 中使用 RigidBody 类,它就看不到 RigidBody 类标识符。我在我的文件中包含了“RigidBody.h”,甚至尝试制作类的原型(prototype)。有趣的是,当我删除“RigidBody.h” header 包含时,它会吐出更多错误,让我相信它正在读取它。我做错了什么吗?

这是我收到的错误输出:

1>------ Rebuild All started: Project: SideScroller, Configuration: Debug Win32 ------
1> WorldChunkManager.cpp
1> World.cpp
1> Vector.cpp
1>e:(directory)\vector.cpp(41): warning C4244: 'argument' : conversion from 'double' to 'float', possible loss of data
1>e:(directory)\vector.cpp(48): warning C4244: 'argument' : conversion from 'double' to 'float', possible loss of data
1> Tile.cpp
1> RigidBody.cpp
1>e:(directory)\character.h(21): error C2146: syntax error : missing ';' before identifier 'pos'
1>e:(directory)\character.h(21): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>e:(directory)\character.h(21): error C2143: syntax error : missing ';' before '='
1>e:(directory)\character.h(21): error C2238: unexpected token(s) preceding ';'

这是 RigidBody.h 的代码

#ifndef RH
#define RH

#include "Vector.h"
#include "World.h"
#include <cmath>
#include <list>

class RigidBody
{
private:
int id;
float gravityFactor;
float airResistFactor;

float mass;
float elasticity;

Vector pos = Vector(0, 0);
int width;
int height;

Vector velocity = Vector(0, 0);

std::list<Vector>* additiveVelocities;
std::list<Vector>* forces;
public:
RigidBody(int x, int y, int w, int h, float mass, float elasticity, float gravityFactor, float airResistFactor);
~RigidBody();

static int rigidBodyCount;

//Get/Set
int getID();
double getX();
double getY();
float getGravFact();
float getAirFact();
float getMass();
float getElast();
Vector getPos();
Vector getVelocity();
std::list<Vector>* getadditiveVelocities();
std::list<Vector>* getForces();

void setX(double x);
void setY(double y);
void setVelocity(Vector& vec);
void setPos(Vector& vec);

//Interactino Functions
void addForce(Vector force);
void addVelocity(Vector velocity);
};


#endif

这是不起作用的代码 (Character.h):

#ifndef CHARACTER_H
#define CHARACTER_H

#include "SDL.h"
#include "Camera.h"
#include "InputManager.h"
#include "Vector.h"
#include "RigidBody.h"

//TEMP DIM
const int CHAR_H = 64;
const int CHAR_W = 12;

class Character
{
private:
double speed;

//Vector pos = Vector(0, 0);

RigidBody pos = RigidBody(0, 0, CHAR_W, CHAR_H, 50, 0, 1, 1);

InputManager* inputPtr;
public:
Character(int x, int y, InputManager* inputPtr);

void getXY(int* dest);
void getChXY(int* dest);
void getCenterXY(int* dest);

//Update
void update(long double last);

bool isFloor();

//Draw
void draw(SDL_Surface* screen, Camera* camPtr);
};

#endif

让我知道您是否需要其他任何东西来找到问题!!!我不想用可能不敬的信息使页面重载。谢谢!

最佳答案

我认为这一行的问题不在于它找不到标识符:

RigidBody pos = RigidBody(0, 0, CHAR_W, CHAR_H, 50, 0, 1, 1);

而是您正试图以 C# 类型的方式进行非法初始化。您不能像在 C++ 中那样只将一个值赋给类成员作为其声明的一部分。您需要在构造函数中或附加到构造函数的初始化程序中分配初始值。

关于c++ - 头文件没有看到其他头标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27610944/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com