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

标签 c++ visual-studio compiler-errors header include

我一直在使用 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/

相关文章:

c++ - 科学应用程序在 Linux 上突然变慢

c# - 无法将 MySql 添加到 C# 程序(引用和 "using"已添加)

c++ - '.colorBet' 的左边必须有类/结构/union

haskell - 在包含单个元素和列表的列表上进行Fmap

c++ - Socket编程中的访问阻塞

c++ - Visual Studio 2015 openmp 支持

c++ - 为什么我的循环只从我的 .obj 文件中读取一个字符?

c# - 由 Visual Studio 2015 创建的 C# 程序的哪些文件值得提交到存储库中?

c# - 调试时如何获取返回值?

compiler-errors - Springer latex 模板SVJour3 f的问题