c++ - Eigen 类型 typedef 因 C4430 失败

标签 c++ typedef eigen

在一个学术项目中,我正在尝试设置一个简单的物理引擎。 我正在使用 Eigen 库进行 vector/矩阵计算。 我希望尽可能独立于我所做的库/设计选择,以方便将来的更改,因此我对 Eigen 类型使用 typedef。

文件PhysicsEngine.h

#pragma once

#include <Eigen/Core>
#include <Eigen/Geometry>
#include "RigidBody.h"

... other inclusions ...

namespace PhysicsEngine
{
    typedef float real;
    typedef Eigen::Vector3f vector3;
    typedef Eigen::Quaternionf quaternion;
    typedef Eigen::Matrix4f matrix4;
    typedef Eigen::Matrix3f matrix3;

    ...

1)这是一个好的设计选择还是我误解了老师告诉我们的内容?

在 RigidBody.h 中包含上面的文件,并尝试使用这些 typedef:

#pragma once

#include "PhysicsEngine.h"

namespace PhysicsEngine
{
    class RigidBody
    {
    public:
    vector3 position;               // <- error C4430
    real inverseMass;               // <- error C4430
    vector3 velocity;               // <- error C4430
    vector3 netForce;               // <- error C4430

    quaternion orientation;         // <- error C4430
    matrix3 inverseInertiaTensor;   // <- error C4430
    vector3 rotation;               // <- error C4430
    vector3 netTorque;              // <- error C4430

    matrix4 transformationMatrix;   // <- error C4430
    ...

我得到:

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int.

2)我在这里做错了什么?

提前致谢。

最佳答案

Is that a good design choice or am I misunderstanding what my teacher told us?

这可能是一个糟糕的设计选择,因为您隐藏了您正在使用特征类型的事实,但是您需要知道这个事实才能使用您的 typedef。

I get a lot of errors C4430.

这样的描述真的让我很恼火。您的编译器不仅会因“错误 C4430”而终止,它还会为您提供详细的错误信息,这对于查找问题的原因至关重要。如果不分享此信息,任何人都很难为您提供帮助。您能否发布第一个完整消息以及导致错误的代码行?

错误数量无关紧要,因为大多数错误很可能源自同一问题。

由于 Microsoft 的警告 C4430 读取“缺少类型说明符 - int 假定”,我怀疑您忘记包含 Eigen 头文件,以便编译器不知道 Eigen::Vector2f 是什么。是。

尝试添加#include <Eigen/Core>PhysicsEngine.h .


根据您更新的代码:您有循环依赖项。 PhysicsEngine.h包括RigidBody.h反之亦然。这不好。

我怀疑编译时RigidBody.cpp ,编译器最终将解析 RigidBody.h 中的类定义。在 PhysicsEngine.h 中的 typedef 之前,以便您的自定义 typedef 此时不可用。

您可能应该删除 RigidBody.h包括来自 PhysicsEngine.h ,或将您的 typedef 移动到单独的头文件中。

关于c++ - Eigen 类型 typedef 因 C4430 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9989186/

相关文章:

c++ - Eigen 3 断言在求解线性系统时失败 - 据我所知,这是由于 Eigen 中的无效索引造成的

c++ - 图、顶点、STL 列表 : Why does list come out empty?

C++ 和 Xcode : Apple Mach-O Linker error?

c++ - 将 typedef 函数指向另一个类中的另一个函数

c - 初始化包含指向其自身类型的指针的常量结构

c++ - 将特征复矩阵返回到 mex 函数中的 matlab,无需额外复制

c++ - POSIX regex.h 是否提供 unicode 或基本上非 ascii 字符?

c++ - 具有私有(private)构造函数的类私有(private)继承的工作机制

c - 转发 "Typedefing"一个结构体

c++ - 如何使用 Eigen 设置 Levenberg-Marquardt 阻尼