【发布时间】: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 以重现相同的错误消息
#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?谢谢!
【问题讨论】:
-
包含对象的标题怎么样?
-
@JVApen,非常感谢,它适用于我的示例项目和使用 msvc 的 v8 代码。虽然 v8 代码可能间接包含了其他头文件中的 objects.h,但我不是 100% 确定
标签: c++ v8 visual-studio-2019