Boost logo

Boost Users :

Subject: Re: [Boost-users] multi_array and variants
From: Krzysztof Czainski (1czajnik_at_[hidden])
Date: 2010-11-08 12:01:39


Hello, Alle

2010/11/8 Alle Meije Wink <a.m.wink_at_[hidden]>

> What I now have is a class bisArray:
> ...
> template<typename T>
> class bisArray: public bisObject {
> typedef boost::variant
> < boost::multi_array_ref<T, 1>,
> boost::multi_array_ref<T, 2>,
> boost::multi_array_ref<T, 3>,
> boost::multi_array_ref<T, 4>,
> boost::multi_array_ref<T, 5>,
> boost::multi_array_ref<T, 6>,
> boost::multi_array_ref<T, 7>,
> boost::multi_array_ref<T, 8>,
> boost::multi_array_ref<T, 9>
> > bisArray_t;
> bisArray_t _bisArray;
> ...
>
> and a class bisImage, which has a bisArray as well as a pointer to the
> data as read from file (1-dimensional structure):
> ...
>
> template<typename T>
>
> class bisImage: public bisObject {
>
> public:
>
> /** Constructor using existing array data
> Reformats array as bisImage
> */
> bisImage ( T* _data, size_t _dimensions, std::vector<size_t> _sizes
> ):
> data(_data), dimensions(_dimensions) {
>

This code (or You) comes from java or C#, doesn't it? ;-) In C++ it is
supposed to be this->[...] instead of this.[...]

Second thing: the member storage is initialized with the default constructor
(which in this case does not exist => error ), and then assigned (below).

I suggest a change to:
bisImage([...]) : [...], storage( _data, _dimensions, _size ) { [...]
and remove the assignment from the body of the constructor

Note also: I have read in many places, that you should not use names
beginning with an underscore (_), because they are reserved for
compiler/library implementation. One of those places was Herb Sutter's gotw
series.

> this.storage=bisArray<T>( _data, _dimensions, _sizes);
> this.dummy = T();
> }

...
>
> When I try to initialise an image read from file using
> ...
> bisImage<unsigned char> newimage=bisImage<unsigned char> ((unsigned
> char *)testimage->data, ndim, dims);
> ...
>
> I get, as the first of many errors, this message
> bisimage.hpp|33|error: no matching function for call to
> ‘canabis::bisArray<unsigned char>::bisArray()’|
>
>
Good lock with Your work on this!

Regards, Kris



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net