Инициализация вектора объектов (с конструктором, принимающим значения), являющегося членом класса

263
22 июля 2022, 08:20

Количество объектов класса MCP в векторе _rheos заранее неизвестно. std::vector использую впервые. Ткните носом, пожалуйста, что не так. Не обязательно использовать вектор, но я другого решения для динамического массива объектов не нашёл.

class MCP
{
public:
    MCP (mbed::SPI& spi, PinName cs) : _spi(spi), _cs(cs) {}
private:
    mbed::SPI& _spi;
    mbed::DigitalOut _cs;
};
class Load
{
public:
    Load(uint8_t load_qty, mbed::SPI& spi, PinName rs) : _rs(rs)
    {
        for (register uint8_t i = 0; i < load_qty; i++)
        {
            _rheos.emplace_back(spi, NC);  //Здесь всё падает
        }
    }
private:
    mbed::DigitalOut _rs;
    std::vector<MCP> _rheos;
};
int main()
{
    mbed::SPI spi1(MOSI, MISO, SCK);
    Loads RLoads(7, spi1, BUTTON1); 
}

Компилируется успешно, но не работает.

Answer 1

Проблема оказалась в том, что MCP не нравится NC в качестве PinName. При этом, если, например, тот же SPI объявить как spi2(MOSI, NC, SCK); - то никаких проблем и всё работает. Mbed-OS magic.

READ ALSO
Почему g++-10 не может использовать ключевые слова связанные с корутинами, хотя 20 стандарт включен и необходимый флаг выставлен?

Почему g++-10 не может использовать ключевые слова связанные с корутинами, хотя 20 стандарт включен и необходимый флаг выставлен?

Я попытался использовать ключевые слова из с++20 связанные с корутинами, но компилятор выдает ошибку

228
Создание shared_ptr через make_shared и через new

Создание shared_ptr через make_shared и через new

Создание std::shared_ptr через std::make_shared может быть полезным в следующем случае:

309
Флаги и манипуляторы форматирования

Флаги и манипуляторы форматирования

У меня есть переменная double d = 123321

157
Изменение всех элементов вектора

Изменение всех элементов вектора

Есть двумерный вектор: vector<vector<int>> a(n, vector<int>(c+1, 0))И хочется изменить все его элементы на определенну константу (например 1)

279