Как объявить постоянную пару внутри моего заголовочного файла

#include <utility>
class C {
   private:
     const std::pair<int,int> corner1(1,1);
};

GCC сообщает об ошибке: ожидаемый идентификатор перед числовой константой.

Мне нужно создать объект в момент его объявления, поскольку он константный, но мне кажется, что он не имеет правильного синтаксиса.


person Patrick.SE    schedule 08.08.2012    source источник


Ответы (2)


Мне нужно создать объект в момент его объявления, поскольку он константный, но мне кажется, что он не имеет правильного синтаксиса.

Нет, вы можете инициализировать только неинтегральные типы - константные или нет (по крайней мере, до C++11) в списке инициализаторов конструктора:

class C {
   private:
     const std::pair<int,int> corner1;
     C() : corner1(1,1) {}
};

Но мне кажется, что вам не нужно реплицировать член в каждом экземпляре, поэтому вместо этого я просто сделаю его статическим:

class C {
   private:
     static const std::pair<int,int> corner1;
};

//implementation file:
const std::pair<int,int> C::corner1(1,1);
person Luchian Grigore    schedule 08.08.2012

Если вы передаете -std=c++11 и используете более новую версию gcc, вы можете сделать это:

class C {
   private:
     const std::pair<int,int> corner1{1,1}; // Note curly braces
};
person Jesse Good    schedule 08.08.2012