Catching array out of bounds

Lars T. Kyllingstad public at kyllingen.NOSPAMnet
Thu Nov 5 06:51:18 PST 2009


jicman wrote:
> Justin Johansson Wrote:
> 
>> jicman Wrote:
>>
>>> Greetings!
>>>
>>> I have this program,
>>>
>>> import std.stdio;
>>> void main()
>>> {
>>>   char[][] a = ["a","b","c"];
>>>   try
>>>   {
>>>     writefln(a[3]);
>>>   }
>>>   catch (ArrayBoundsError)
>>>   {
>>>     writefln("error...");
>>>   }
>>> }
>>>
>>> when I compile it, I get,
>>>
>>> 23:53:52.73>build -I..;c:\D\dmd\import array.d
>>> array.d(10): Error: identifier 'ArrayBoundsError' is not defined
>>> array.d(10): Error: ArrayBoundsError is used as a type
>>> Error: can only catch class objects, not 'void'
>>>
>>> This is right from the D1 Arrays help...
>>>
>>> http://www.digitalmars.com/d/1.0/arrays.html
>>>
>>> What am I doing wrong?
>>>
>>> thanks,
>>>
>>> josé
>>>
>> Hi josé,
> Hi Justin.
> 
>> You don't import modules as you show:
>> build -I..;c:\D\dmd\import array.d
> I am giving the path of where the modules are.  The array.d is the program that contains the above code.
> 
>> You should be importing the array module into
>> your program using the following statement.
>>
>> import std.array;
> there is no module std.array for D1.  I don't know about D2, but D1 does not have it.
> 
>> Also (and I' not 100% sure about this) that you might need to
>> declare a variable along with the catch statement like as follows
>> (at least that's what I always do regardless of whether or
>> not it may be omitted) ...
>>
>> catch (ArrayBoundsError e) {
>> ...
>> }
> I tried that also.  :-) Did you even try the little program?  Copy and paste to your favorite editor and give it a try. :-)
> 
> Anybody else can provide me what is wrong with the program above?
> 
> thanks,
> 
> josé


Actually, there is a module called std.array in D1 as well. For some 
reason it's just not in the documentation on the homepage. The 
ArrayBoundsError class is defined in there. Try importing it, and see if 
that works. (I can't test it, as I'm using D2 myself.)

Alternatively, write catch(Exception e) or catch(Error e). Both of them 
are defined in object.d and are always available.

-Lars

-Lars


More information about the Digitalmars-d-learn mailing list