v8::ScriptOrigin构造函数匹配失败问题求助
关于v8::ScriptOrigin构造函数调用参数不匹配的问题
问题场景
我在项目的C++源文件中调用v8::ScriptOrigin类的代码如下:
ScriptOrigin script_origin( isolate_, script_name, Integer::New(isolate_, 0), // line offset Integer::New(isolate_, 0), // column offset False(isolate_), // isCrossOrigin Local<Integer>(), // scriptId Local<Value>(), // sourceMapURL False(isolate_), // isOpaque False(isolate_), // isWASM su.IsNoModule() ? False(isolate_) : True(isolate_));
尝试将Local<Integer>()硬编码为随机整数值后,仍出现以下错误:
error: no matching constructor for initialization of 'v8::ScriptOrigin' ScriptOrigin script_origin( note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 10 were provided note: candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 10 were provided
无法理解参数不匹配的提示信息,以下是V8头文件中该类的源码:
class V8_EXPORT ScriptOrigin { public: V8_INLINE ScriptOrigin(Isolate* isolate, Local<Value> resource_name, int resource_line_offset = 0, int resource_column_offset = 0, bool resource_is_shared_cross_origin = false, int script_id = -1, Local<Value> source_map_url = Local<Value>(), bool resource_is_opaque = false, bool is_wasm = false, bool is_module = false, Local<Data> host_defined_options = Local<Data>()) : v8_isolate_(isolate), resource_name_(resource_name), resource_line_offset_(resource_line_offset), resource_column_offset_(resource_column_offset), options_(resource_is_shared_cross_origin, resource_is_opaque, is_wasm, is_module), script_id_(script_id), source_map_url_(source_map_url), host_defined_options_(host_defined_options) { VerifyHostDefinedOptions(); } };
问题原因与修复方案
核心问题:参数类型完全不匹配
对比调用代码和构造函数定义,几个关键类型错误直接导致编译器无法匹配到正确的构造函数:
line offset/column offset:构造函数要求传入原生int类型,但你传的是Integer::New()生成的Local<Integer>对象;isCrossOrigin/isOpaque/isWASM/is_module:构造函数要求传入原生bool类型,但你传的是False()/True()生成的Local<Boolean>对象;scriptId:构造函数要求传入原生int类型,但你传的是Local<Integer>()空对象。
编译器找不到符合参数类型的构造函数重载,只能把隐式的拷贝/移动构造函数列出来,这就是提示“需要1个参数,但提供了10个”的原因——本质是类型不匹配,而非参数数量问题。
修复后的调用代码
将所有不符合类型要求的参数替换为对应原生类型的值即可:
ScriptOrigin script_origin( isolate_, script_name, 0, // line offset: 直接传int 0, // column offset: 直接传int false, // isCrossOrigin: 直接传bool -1, // scriptId: 使用默认int值-1 Local<Value>(), // sourceMapURL: 保持原空值 false, // isOpaque: 直接传bool false, // isWASM: 直接传bool !su.IsNoModule() // is_module: 简化为原生bool逻辑 // 可选:若需自定义host_defined_options可在此添加,否则使用默认空值 );
内容的提问来源于stack exchange,提问作者black pearl
相关产品推荐
相关产品推荐

