【问题标题】:c2027 use of undefined type “v8::internal::Object"c2027 使用未定义类型“v8::internal::Object”
【发布时间】:2019-08-02 07:52:59
【问题描述】:

我正在尝试使用 Visual Studio 2019 构建 google v8(我可以使用带有 clang 的官方步骤进行构建),但出现以下错误:

错误 C2027 使用未定义类型“v8::internal::Object”v8_base_without_compiler E:\v8\src\handles\handles.h144

  V8_INLINE T operator*() const {
    // unchecked_cast because we rather trust Handle<T> to contain a T than
    // include all the respective -inl.h headers for SLOW_DCHECKs.
    SLOW_DCHECK(IsDereferenceAllowed(INCLUDE_DEFERRED_CHECK));
    return T::unchecked_cast(Object(*location()));  // error on this line
  }

我对这部分的理解是,handles.h 包含objects.h 并且有类Object 的前向声明(来自objects.h),并且内联运算符方法是调用Object 构造函数,这导致c2027 使用未定义类型v8::internal::Object

我使用 Visual Studio 2019 创建了一个 simple c++ project 以重现相同的错误消息

handles.h

#ifndef HANDLES_H_
#define HANDLES_H_

// forward declaration
class Object;

class Handle {
public:
    __forceinline void* op() {
        return new Object(0); // error here c2027 use of undefined type "Object"
    }

    void dummy();
};

#endif 

objects.h

#ifndef OBJECTS_H_
#define OBJECTS_H_

class Object {
public:
    explicit Object(int n):_n(n) {

    }

    void dummy();

    int _n;
};

#endif 

类似的逻辑,一个内联方法实现调用另一个类构造函数

我不明白 google 使用 gnclang 的官方步骤如何编译整个项目,但 msvc 出错

如何使它适用于 Visual Studio 2019?谢谢!

【问题讨论】:

  • 包含对象的标题怎么样?
  • @JVApen,非常感谢,它适用于我的示例项目和使用 msvc 的 v8 代码。虽然 v8 代码可能间接包含了其他头文件中的 objects.h,但我不是 100% 确定

标签: c++ v8 visual-studio-2019


【解决方案1】:

我正在复制@JVApen 的评论作为答案

添加#include "ojbects.h" 将解决问题

如果您尝试使用 Visual Studio 2019 构建 google 的 v8,请在 handles/handles.h 中添加 #include "objects/objects.h",然后它将编译通过

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    • 2020-12-04
    • 2019-12-02
    相关资源
    最近更新 更多