我正在尝试使用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,以重现相同的错误消息
#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
#ifndef OBJECTS_H_
#define OBJECTS_H_
class Object {
public:
explicit Object(int n):_n(n) {
}
void dummy();
int _n;
};
#endif
这是类似的逻辑,内联方法的实现调用另一个类的构造函数
我不明白Google的gn
和clang
官方步骤如何可以编译整个项目,但是出现了msvc错误
如何使其适用于Visual Studio 2019?谢谢!
答案 0 :(得分:0)
我要复制@JVApen的评论作为答案
添加#include "ojbects.h"
将解决此问题
如果您要尝试使用Visual Studio 2019构建Google的v8,请在#include "objects/objects.h"
中添加handles/handles.h
,然后它将编译通过