c2027使用未定义类型“ v8 :: internal :: Object”

时间:2019-08-02 07:52:59

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

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

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

  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?谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

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