Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   C++ (http://www.velocityreviews.com/forums/f39-c.html)
-   -   initializing the array (http://www.velocityreviews.com/forums/t630345-initializing-the-array.html)

anon 08-12-2008 07:55 AM

initializing the array
 
Hello,

Considering the following code:


/// code
#include <vector>
#include <iostream>

template< int N >
class a
{
public:
a( const float p[] ) :
v( &p[0], &p[0] + N )
{
}

void print()
{
std::cout<<"Stored array = ";
for (int i = 0; i < N; ++ i )
{
std::cout<<v.at(i)<<" ";
}
std::cout<<std::endl;
}

std::vector< float > v;
};

int main()
{
a< 2 > obj( (float[]){ 0.3, 0.5 } );
obj.print();
}
/// end of code


when I compile using gcc with -pedantic-errors option, I get next error:
error: ISO C++ forbids compound-literals
comeau online agrees there is a problem there.

But gcc without -pedantic-errors compiles and executes fine.

Am I causing an undefined behavior somehow?
Is there a way to do what I want, without getting that error? I need to
enable -pendantic_errors

Thank you in advance

anon 08-12-2008 10:56 AM

Re: initializing the array
 

This program is doing almost what I want (take a look into the
declaration of the obj object). I took the idea from boost list_of :

#include <vector>
#include <iostream>
#include <cassert>

template< int N >
class a
{
public:
explicit a( const float p ) :
v( N, p ),
i(0)
{
}

a& operator() ( const float p )
{
this->v.at(++i) = p;
return *this;
}

void print() const
{
assert( (N-1) == i );
std::cout<<"Stored array = ";
for (int i = 0; i < N; ++ i )
{
std::cout<<v.at(i)<<" ";
}
std::cout<<std::endl;
}

std::vector< float > v;
int i;
};

int main()
{
const a< 2 > obj( a< 2 >( 0.3 )( 0.5 ) );
obj.print();
}


All times are GMT. The time now is 12:22 PM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.