访问struct变量会产生错误,因为"无法定位对象方法"

时间:2014-03-13 14:49:39

标签: perl struct

我有一个结构如下。

包含Include路径数组的struct,以及正在编译的cpp文件名。

struct( SourceFile_compile_line => [
    include_path_list => '@', # include path list
    source_filename => '$', # CPP file name
    include_list_index => '$', # no of include path list.
    object_file => '$',
]);

我已经分配了一个源文件名路径,如下所示,其中$a_path包含.cpp文件的完整路径。

$compile_line_array->source_filename($a_path);

在一个函数中,我将这个struct变量作为arugment,

get_list_of_headers($compile_line_array);

并在函数中访问该变量,如下所示。

sub get_list_of_headers{
    my $compile_line_array;
    $compile_line_array = SourceFile_compile_line->new();
    $compile_line_array = $_;

函数get_list_of_headers()中的以下行会出错;

print $compile_line_array->source_filename;

错误是:

Can"t locate object method "source_filename".

1 个答案:

答案 0 :(得分:0)

尝试更改行:

$compile_line_array = SourceFile_compile_line->new();

为:

$compile_line_array = SourceFile_compile_line->new(
  include_path_list => shift, # include path list
  source_filename => shift, # CPP file name
  include_list_index => shift, # no of include path list.
  object_file => shift
);

假设您按顺序传递参数,并且传递的第一个参数是数组引用。如果include_path是一个数组,则需要将它放在参数列表的末尾。

在这里你可以这样称呼它:

get_list_of_headers( \@include_path, $source_file, $include_list_index, $object_file );