Я сталкиваюсь с некоторыми ошибками компилятора, которые не понимаю. Я почти уверен, что делаю что-то очень неправильное, но я не знаю что. Я хотел бы, чтобы все мировые константы были определены как принадлежащие классу.
Примечания:
Я использую классы только как структуры с прикрепленными членами. Я не следую строгому объектно-ориентированному дизайну специально. Пожалуйста, не комментируйте публичные переменные.
Меня не очень беспокоит вопрос о компиляции компилятора. Я использую эту структуру, потому что мне легко пользоваться. (Если это сработало)
class Board{
public:
enum PhysicsResult{ BOUNCE, OUT_OF_BOUNDS_TOP, OUT_OF_BOUNDS_BOTTOM, CONTINUE };
//World constants
const static float Height = 500;
const static float Width = 300;
//ERROR: 'Board::Width' cannot appear in a constant-expression.
const static float PaddleWidth = Width/15;
const static float BallRadius = 5;
const static float BounceDistance = 1.5;
//World Objects
Ball ball;
Paddle paddle1;
Paddle paddle2;
/*
1---2
| |
0---3
*/
//ERROR: a brace-enclosed initalizer is not allowed here before '{' token
//ERROR: invalid in-class initalization of static data member of nonintegral type 'const Pair[4]'
const static Pair corners[4] = {Pair(0, 0), Pair(0, Height), Pair(Width, Height), Pair(Width, 0)};
//ERROR: a brace-enclosed initalizer is not allowed here before '{' token
//ERROR: invalid in-class initalization of static data member of nonintegral type 'const Pair[2]'
const static Pair left_wall[2] = {corners[0], corners[1]};
//ERROR: a brace-enclosed initalizer is not allowed here before '{' token
//ERROR: invalid in-class initalization of static data member of nonintegral type 'const Pair[2]'
const static Pair right_wall[2] = {corners[3], corners[2]};
//ERROR: a brace-enclosed initalizer is not allowed here before '{' token
//ERROR: invalid in-class initalization of static data member of nonintegral type 'const Pair[2]'
const static Pair top_wall[2] = {corners[1], corners[2]};
//ERROR: a brace-enclosed initalizer is not allowed here before '{' token
//ERROR: invalid in-class initalization of static data member of nonintegral type 'const Pair[2]'
const static Pair bottom_wall[2] = {corners[0], corners[3]};
Если это возможно, каков правильный синтаксис для этого?
Если это невозможно, какую альтернативу мне следует использовать?