Вектор в классе c - PullRequest
       5

Вектор в классе c

0 голосов
/ 09 марта 2020

Я хотел бы иметь вектор stati c (const) в классе stati c. Вектор не будет заполнен новыми элементами, он будет иметь только элементы, определенные в классе configuration: {1,2,3,4,5}.

Как сделать вектор debugLevels stati c?

#include <ArduinoSTL.h>

class configuration {
  public:
  static std::vector<int> const debugLevels = {1,2,3,4,5}; // throws error: in-class initialization of static data member 'const std::vector<int> configuration::debugLevels' of incomplete type
};

void setup() {
  for(int i=0; i<configuration::debugLevels.size(); i++ {
    // do some stuff here...
  }
}

void loop() {
}

Ответы [ 3 ]

5 голосов
/ 09 марта 2020

Самое простое, что нужно сделать, это изменить class на namespace

namespace configuration {
  const std::vector<int> debugLevels = {1,2,3,4,5};
}
1 голос
/ 09 марта 2020

В случае, если вам нужно использовать нечто подобное, обратите внимание, что инициализация должна происходить вне определения класса (более конкретно, в соответствующем файле. cpp), что означает:

config .hpp :

class configuration 
{
  public:
  static const std::array<int, 5> debugLevels;
};

config. cpp:

const std::array<int, 5> configuration::debugLevels = {1,2,3,4,5};

Как я уже писал выше, возможно использование std :: массив лучше в этом случае, и я согласен, что если нет необходимости в функциональности класса, вы должны использовать пространство имен.

1 голос
/ 09 марта 2020

std::vector, кажется, здесь не оправдано. Мин / макс будет делать:

class configuration {
  public:
  static constexpr int debugLevelMin = 1;
  static constexpr int debugLevelMax = 5;
};

void setup() {
  for(int i=debugLevelMin; i<=debugLevelMax; i++ {
    // do some stuff here...
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...