Error message: expression in new declarator must have integral or enumeration type

#include <iostream>
#include <cmath>
#include <new>
using namespace std;

struct vector
    double x,y,z;

struct ivector
    int ix,iy,iz;

struct vmodel
    int nx,ny,nz;                                         //grid dimensions
    int nr;                                               //number of reflectors

    struct vector r1,r2;                                  //2 corners of the spanning model
    float dx,dy,dz;
    float s1_size,rf_size,jp_size,ir_size,ij_size,layer_size;

   // dynamic arrays being declared here

    float *s1=new float[s1_size];                         
    float *rf=new float[rf_size];                       
    float *jp=new float[jp_size];                        
    int *ir=new int[ir_size];                               
    int *ij=new int[ij_size];                               
    int *layer=new int[layer_size];



this is just code and I cannot understand what the actual issue is and how it occurs, with which ROOT version on which platform.
Nevertheless, a piece of advice I can give is

  • never use statements such as “using namespace XYZ” in header files (I assume the snippet above is a header)
  • do not create entities with the same name of the stl ones in the global namespace, especially after using a “using namespace std” declaration



The compiler tells you (in its own delightful colorful way) that one cannot create a dynamic array whose size is a floating point value.
Either declare the s1_size,etc variable as e.g. int or convert them to e.g. int when declaring the arrays.


This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.