基本上是一个非静态成员theta
,它由另一个类成员初始化但很好地初始化。然后valley_max
由theta
初始化,如您所见。现在一切正常。然后我想初始化一个边界为valley_max
的数组。首先,我得到了错误:
无效使用非静态数据成员
然后我添加static const int valley_max
,你可以看到。但我得到的错误如下:
数组绑定在']'标记
之前不是整数常量
我只是想知道我是否可以初始化一个数组,该数组的边界由一个由另一个成员变量初始化的成员变量初始化。
谢谢你的帮助。
AP_Tmxk_VFH.cpp
AP_Tmxk_VFH::AP_Tmxk_VFH() :
l(5),
threshold(5),
safe_space(0.7),
detected_range(2.5),
theta(degrees(acos(1-sq(safe_space)/(2*sq(detected_range))))),
valley_max(round_float(180.0/theta)),
valley_count(0),
{
}
AP_Tmxk_VFH.h
class AP_Tmxk_VFH {
privte:
int l;
int threshold;
int safe_space;
int theta;
int detected_range;
static const int valley_max ;
struct{
bool inside_valley = false;
uint16_t up_bound = 0;
uint16_t down_bound = 0;
}valley[valley_max];
}
答案 0 :(得分:2)
您的具体问题是由于C ++不支持可变长度数组。请考虑使用std::vector
或其他C ++标准库容器。
但是您还有其他问题(我认为这会让您的问题变得有趣):成员初始化的顺序是它们在课程定义中出现的顺序,不命令它们出现在初始化中。
例如,在您的情况下,theta
在 detected_range
之前初始化,并且由于后者未在您{{1}的评估中使用它时初始化},代码的行为未定义!
在您的情况下,除非您需要成员theta
,否则如果我是你,我会在构造函数体中初始化未设置为文字的成员。
答案 1 :(得分:0)
我只是想知道我是否可以初始化数组,该数组的边界由一个由另一个成员变量初始化的成员变量初始化。
不,你不能。
你不能,因为这样的变量是
不是整数常量
就像错误消息所说的那样。成员变量的值在编译时是未知的 - 这与数组大小必须是编译时间常量(即在编译时已知)的要求相矛盾。
解决方案:改为使用#!usr/bin/perl
use IO::Uncompress::Unzip qw(unzip $UnzipError);
use File::Find;
use strict;use warnings;
my $propath ="/home/test/prroot/Projects/";
my $proj = "/home/Ras/projectroot/projects.txt";
my $output_dir = "/home/Ras/projectroot/xmlres/";
my @projlist = `cat $proj`;
my $projname;
foreach my $pr (@projlist){
chomp($pr);
$projname = $pr;
$projname =~ s/ /\_/g;
$projname =~ tr/ /_/;
$projname =~ s/\(/%28/g;
$projname =~ s/\)/%29/g;
$projname =~ s/\&/%26/g;
$projname =~ s/\,/%2C/g;
print "$dir\n";
find({ wanted => \&find_zip}, $dir);
}
sub find_zip {
my $filename = $File::Find::name;
print "$filename\n";
if ($filename =~ /zip$/ ) {
unless( unzip $filename => $output_dir.'result'.$projname.'.xml', Name => "data" ) {
warn "$filename: $UnzipError";
}
}
}
。在编译时不会锁定向量的大小。