[RESOLVIDO] Array tam. variável em construtor de classe?

Olá pessoal.

Tenho uma dúvida sobre programação.
Estou construindo um wrapper para a biblioteca CapacitiveSensor.h, onde a leitura do sensor capacitivo é uma média, definida no momento de instanciação do objeto.

Só que meus conhecimentos de programação não são tão grandes.
Estou recebendo estes erros do compilador:

...\Arduino\arduino-1.0.3\libraries\LevelSensor/LevelSensor.h:19: error: invalid use of non-static data member 'LevelSensor::_numReadings'
...\Arduino\arduino-1.0.3\libraries\LevelSensor/LevelSensor.h:20: error: from this location
...\Arduino\arduino-1.0.3\libraries\LevelSensor/LevelSensor.h:20: error: array bound is not an integer constant

Existe alguma forma de escrever um construtor de classe dinâmico?
Eu tentei usar long *_numReading = new long; mas também ocorrem erros.

Grato pela ajuda.

LevelSensor.h

#ifndef LevelSensor_h
#define LevelSensor_h

#include "Arduino.h"

class LevelSensor
{
  public:
    LevelSensor(int sendPin, int readPin, int optionalNumReadings = 20);
    long read();
	
  private:
	int _numReadings; 
	long _readings[_numReadings];
	//long _readings[20];
	//long *_numReading = new long;
	long _reading;
	long _sum;
	long _previousAverage;
	long _currentAverage;
};

#endif

LevelSensor.cpp

#include "Arduino.h"
#include <LevelSensor.h>
#include <CapacitiveSensor.h>

// Constructor /////////////////////////////////////////////////////////////////
// Function that handles the creation and setup of instances

LevelSensor::LevelSensor(int sendPin, int readPin, int optionalNumReadings)
{
	CapacitiveSensor capSensor = CapacitiveSensor(sendPin,readPin);
	int counter;
	
	if (optionalNumReadings != 20 )
		_numReadings = optionalNumReadings;

	//Prevents zero reading
	_reading = 0;
	while(_reading == 0)
		_reading =  capSensor.capacitiveSensorRaw(30);

	for( counter = 0; counter < _numReadings; counter++)
		_readings[counter] = _reading;

	_previousAverage = _reading;
	_currentAverage = _reading;
	_sum = _reading * _numReadings;

}

long LevelSensor::read()
{
	int counter;
  
	for( counter = 0; counter < _numReadings; counter ++)
	{
		do
			_reading = capSensor.capacitiveSensorRaw(30);
		while(_reading < 0);

		_sum = _sum - _readings[counter];
		_readings[counter] = _reading;
		_sum = _sum + _reading;
	}
	
	_previousAverage = _currentAverage;
	_currentAverage = _sum/_numReadings;
	_currentAverage = (_currentAverage + _previousAverage)/2;
	
	return _currentAverage;
}

Se os teus conhecimentos de programação não são assim tão grandes... e aparentemente os de sistemas embebidos também não, talvez fosse melhor deixares esse projecto de lado até saberes um pouco mais de ambas essas áreas. Não?

Assim de repente, o que podes fazer ou estudar são malloc() e realloc()... mas estás a meter-te num mundo de sarilhos e não vais adicionar muita funcionalidade ao teu wrapper.

Então rapaz,

Infelizmente não tenho essa opção. Escolhi Arduino como meu tema de trabalho de conclusão de curso e agora preciso terminar esse trabalho.

Acredito que seja tentando que consigo aprender e chegar lá. Não consigo aprender programação sem trabalhar.

De qualquer modo, lhe agradeço pela ajuda, pois sempre me ajuda nas minhas questões.

Consegui 8)

Estou um pouco enferrujado na programação, mas pesquisando consegui o que queria.
Tive que utilizar apontadores nas variáveis privadas, para poder instanciar os elementos de tamanho variável no construtor.

Por algum motivo, o compilador do Arduino não permite usar new para variáveis primitivas, somente para objetivos.
Por isso, usei new na classe CapactiveSensor mas precisei usar malloc() para o array de long.

O código ainda não está terminado, ainda vou otimizar a forma como utilizo o array.

Ficou assim:

LevelSensor.h

#ifndef LevelSensor_h
#define LevelSensor_h

#include "Arduino.h"
#include <CapacitiveSensor.h>

class LevelSensor
{
  public:
    LevelSensor(int sendPin, int readPin, int numReadings);
    long read();
	
  private:
	CapacitiveSensor *capSensor;
	bool _firstRun;
	int _numReadings;
	long *_readings;
	long _reading;
	long _sum;
	long _previousAverage;
	long _currentAverage;
};

#endif

LevelSensor.cpp

#include "Arduino.h"
#include <LevelSensor.h>

LevelSensor::LevelSensor(int sendPin, int readPin, int numReadings = 20)
{
	int counter;
	
	_firstRun = true;	
	
	_numReadings = numReadings;
	
	_readings = (long*) malloc(_numReadings * sizeof(long));
	
	capSensor = new CapacitiveSensor(sendPin, readPin);

}

long LevelSensor::read()
{
	int counter;

	if (_firstRun == true)
	{
		_firstRun = false;
		
		_reading = (*capSensor).capacitiveSensorRaw(30);

		for( counter = 0; counter < _numReadings; counter++)
		{
			_readings[counter] = _reading;
			
		}

		_currentAverage = _reading;
		_sum = _reading * _numReadings;
	}
	else
	{
		
		for( counter = 0; counter < _numReadings; counter ++)
		{
			
			_reading = 0;
			while(_reading <= 0)
			{
				_reading = (*capSensor).capacitiveSensorRaw(30);
			}

			_sum = _sum - _readings[counter];
			_readings[counter] = _reading;
			_sum = _sum + _reading;
		}

		_previousAverage = _currentAverage;
		_currentAverage = ((_sum/_numReadings) + _previousAverage)/2;
	}
	
	return _currentAverage;
}