【问题标题】:Transforming *& to just a pointer将 *& 转换为只是一个指针
【发布时间】:2015-07-31 17:41:43
【问题描述】:
"no matching function for call to [...] cdk::sequence_node*&"

这是什么魔法?我如何解决它?我必须投射吗?

函数需要 cdk::sequence_node * some_sequence_node 作为参数。

根据这个关于asterisk and ampersand的问题

二进制节点 b;

BinaryNode* ptr = &b;

BinaryNode* &t = ptr;

如果BinaryNode* &t = ptr;,为什么编译器会抱怨? 编辑(按要求):

pwn_parser.y: In function ‘int yyparse(std::shared_ptr<cdk::compiler>)’:
pwn_parser.y:70:135: error: no matching function for call to ‘pwn::func_decl_node::func_decl_node(int, bool, bool, basic_type*&, std::string*&, cdk::sequence_node*&)’
 func_decl : type_specifier tIDENTIFIER '(' func_decl_args ')' context { $$ = new pwn::func_decl_node(LINE, false, false, $1, $2, $4); }

pwn_parser.y:70:135: note: candidates are:

In file included from ast/all.h:99:0,
                 from pwn_parser.y:5:
./ast/func_decl_node.h:29:12: note: pwn::func_decl_node::func_decl_node(int, bool, bool, basic_type*, cdk::identifier_node*, cdk::sequence_node*)
     inline func_decl_node(int lineno, bool local, bool import,

【问题讨论】:

  • 可能是签名的其他部分不匹配,但您没有显示真实代码,也没有显示整个错误消息,也没有编译器可能给出的候选列表,所以我们的手被束缚了。
  • &amp;t = ptr 没有多大意义。 '变量“t”的地址是存储在变量“ptr”中的值'.
  • *已编辑 - 感谢您的回复:D 必须在明天之前完成项目。墨菲定律
  • 糟糕,正确。但是,您传递的是 std::string* ,而 identifier_node* 是预期的(编译器显示为候选的重载)。

标签: c++11 call asterisk yacc ampersand


【解决方案1】:

感谢 dyp,他帮助我发现了我忽略的一点不匹配,我得以修复它。

糟糕,正确。但是,您正在传递一个 std::string* ,其中需要一个 identifier_node* (对于编译器显示为候选的重载)。 - 通过 dyp

第 1 课:不要错误地将问题视为一个巨大的怪物或喷火的宽翼龙挡住了你的去路。想象问题总是比你自己小。 Funny Awkward Yeti Comic

第 2 课:不要假设某些信息是不相关的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 2011-04-15
    • 2016-07-03
    • 2017-02-12
    • 1970-01-01
    • 2021-09-20
    相关资源
    最近更新 更多