You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 17:37:04