Perl gv模块调用edge函数报错:No matching function for overloaded 'edge'
Perl gv模块调用
edge函数报错排查 问题场景
根据Perl的gv(graphviz)模块手册中新增边的说明编写测试代码,在SLES15 SP6环境运行时出现重载函数不匹配错误。
模块手册中新增边的说明
New edges Add new edge between existing nodes edge_handle gv::edge (tail_node_handle, head_node_handle);
测试代码
require 5.026_001; use warnings; use strict; use gv; # graphviz # test sub test() { my $result = 0; if (defined(my $gh = gv::digraph('test'))) { if (defined(my $nh = gv::node($gh, 'name'))) { if (defined(my $eh = gv::edge($gh, $nh, $nh))) { if (gv::write($gh, 'test.out')) { print "success\n"; } else { print STDERR "$0: failed to write output: $!\n"; } } else { print STDERR "$0: failed to create edge\n"; } } else { print STDERR "$0: failed to create node\n"; } } else { print STDERR "$0: failed to create digraph\n"; $result = 2; } return $result; } my $result = test();
运行错误信息
No matching function for overloaded 'edge' at ...
错误原因
手册中明确gv::edge的参数仅为尾节点句柄和头节点句柄两个,但测试代码中调用时额外传入了第一个参数$gh(图句柄),参数数量不匹配,导致Perl找不到对应的重载函数。
解决方法
修改gv::edge的调用语句,移除多余的图句柄参数,仅传入两个节点句柄:
# 原错误调用 # if (defined(my $eh = gv::edge($gh, $nh, $nh))) { # 修改后的正确调用 if (defined(my $eh = gv::edge($nh, $nh))) {
修改后重新运行代码,即可正常创建边并生成输出文件。
内容的提问来源于stack exchange,提问作者U. Windl
相关产品推荐
相关产品推荐

