Hello, Alle
2010/11/8 Alle Meije Wink
<a.m.wink@gmail.com>
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()’|