2014-01-22 2 views
1

Я создал 1 библиотеку с 2 классами. Класс Wave и Class LEDLamps. В конструкторе второго класса я пытаюсь заполнить массив объектов первого класса без везения.Arduino: инициализировать пользовательский объект в конструкторе

Вот некоторые части моего настоящего кода. ч Файл:

static const int numberOfWaves = 20; 

class Wave 
{ 
public: 
    Wave(int speed, int blockSize, int ledCount, int lightness,int startCount); // Constructor 

private: 

}; 

// ------------------------------------------------------------------------------------------- // 
class LEDLamps 
{ 
public: 
    LEDLamps(int8_t lampCount, int8_t dataPin, int8_t clockPin); //Constructor 

private: 
    Wave waveArray[numberOfWaves]; 
}; 

.cpp файл

Wave::Wave(int speed, int blockSize, int ledCount, int lightness, int startCount) //Constructor 
{ 
      // Doing some stuff... 
} 

// ------------------------------------------------------------------------------------------- // 
LEDLamps::LEDLamps(int8_t lampCount, int8_t dataPin, int8_t clockPin) //Constructor 
{ 
    int i; 
    for (i = 0; i < numberOfWaves; i++) { 
     waveArray[i] = Wave(10,2,25,150,100); 
    } 
} 

Сообщения об ошибках:

LEDLamps.cpp: In constructor 'LEDLamps::LEDLamps(int8_t, int8_t, int8_t)': 
LEDLamps.cpp:66: error: no matching function for call to 'Wave::Wave()' 
LEDLamps.cpp:14: note: candidates are: Wave::Wave(int, int, int, int, int) 
LEDLamps.h:23: note:     Wave::Wave(const Wave&) 

Что я понял из этого сообщения об ошибке параметры неправы, но я посылаю 5 число и конструктор определяется для получения 5 целых чисел? Так что я должен быть чем-то другим, я делаю неправильно ...

ответ

2

Ошибка говорит вам точно, что неправильно, нет метода Wave::Wave(). Вам нужен конструктор по умолчанию для класса Wave, чтобы иметь возможность создать его массив. Вы также можете создать оператор присваивания копий, если класс Wave содержит нетривиальные данные.

Проблема заключается в том, что массив строится перед тем ТЕЛА LEDLamps пробегов конструктора, так что, когда внутри тела LEDLamps конструктора массив полностью построен, и то, что вы делаете, это назначение (с использованием автоматически сгенерированные авторских оператор присваивания).


К сожалению, по-умолчанию библиотека Arduino C++ по умолчанию довольно ограничена, по крайней мере, когда дело доходит до «стандартных» возможностей C++. Есть libraries that helps, и если это возможно, чтобы использовать такую ​​библиотеку, которую Вы могли бы использовать в std::vector вместо этого, который позволит вам построить вектор в конструктор инициализатора-лист:

class LEDLamps 
{ 
    ... 
    std::vector<Wave> waveVector; 
}; 

... 

LedLamps::LEDLamps(...) 
    : waveVector(numberOfWaves, Wave(10,2,25,150,100)) 
{ 
} 
Смежные вопросы