 <p>This sort of initialization is not allowed in C, but it was allowed in C++98 . </p> <p>Your compiler predates 1998 by several years so it is not surprising that it does not allow some things that did become part of the C++ Standard. </p> <p>You'll have to write <code>{'a', 1}</code> instead of <code>a[0]</code> etc. , or use a macro. The macro solution might look like:</p> <pre><code>#define A0 {'a', 1} #define A1 {'c', 2} #define A2 {'b', 3} first a[3]={A0, A1, A2}; second c={{A0, A1}, 12 }; </code></pre> <p>Alternatively you could initialize <code>a</code> and then set up <code>c</code> at runtime.</p>