![]() |
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 |
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 03:30 PM. |
Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.