我有一个结构如下。
包含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".
答案 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 );