On Mar 5, 5:59 pm, John Harrison <john_androni...@hotmail.com> wrote:
> Jim wrote:
> > On Mar 4, 11:08 pm, John Harrison <john_androni...@hotmail.com> wrote:
>
> >>Jim wrote:
>
> >>>Hi,
> >>>I want to declare that that a valarray of a certain name exist at the
> >>>beginning of some code, but I can't instatiate it until I've read in
> >>>some parameters later on in a for loop i.e.
>
> >>>int main(int argc, char * argv[])
> >>>{
> >>> valarray<float> data;
> >>> float init=0;
> >>> for(int i=0; i<argc; i++)
> >>> {
> >>> //read in parameters, ax1,ax2
> >>> valarray<float> d(init,ax1*ax2); //***
> >>> data=d;
> >>> }
>
> >>>}
>
> >>>Problem is when the code leaves the for loop data is of size 0, as
> >>>what it's pointed to has been deleted by passing out of scope. I've
> >>>tried all sorts of combinations data as extern, defining it outside
> >>>the main block, replacing *** with data(init,ax1*ax2); but no success.
> >>>If anyone's got any ideas I would be very grateful!
> >>>Thanks
>
> >>Well I don't quite follow your code (the loop seems misplaced to me) but
> >>why can't you just do this?
>
> >>int main()
> >>{
> >> float init = 0;
> >> int ax1, ax2;
> >> for (int i = 0; i < argc; ++i)
> >> {
> >> // read in parameters
> >> }
> >> valarray<float> data(init, ax*ay);
> >> ...
>
> >>}
>
> >>john
>
> > This is just an example of one kind of problem I've been having with C+
> > +. If you know you want a complex variable (class or an array for
> > instance), you declare it at the start, but then initialise it when
> > you've got the information to do it. How do you then tie these two
> > together?
>
> Don't declare it at the start, declare it only when you have the
> necessary information to initialise it. I feel I must be missing something.
>
> john
Ok, if you have a class, all of the member variables are declared in
the class definition, and are then available to all of the methods in
that class. I want to have an object with a valarray in it, it's got
to be a valarray as unfortunately the code written by someone else
supplies a valarray. Copying it to a different type would be
inefficient. In the constructor I read in the file using a supplied
method which when given an uninitialised valarray (i.e.
valarray<float> d

gets given a set of values and a confirmed length
etc. Even if I declare a valarray in the method, or use the one in the
class definition the size of the valarray is what it should be whilst
in the method, but as soon as you leave the scope of that method the
array reverts to zero, meaning it's useless to the rest of the class.
I can't find any way of initialising a declared valarray.