Использование размещения новых с Teensy 3

У меня есть класс C ++ в среде Arduino / Teensy, который определен в файле «.h». В файле «.cpp» я пытаюсь сделать «размещение нового» с некоторым кодом. Я получаю следующую ошибку:

oscillator.h:17: error: no matching function for call to 'operator new(sizetype, AudioSynthWaveform*)'
_current_tone = static_cast<AudioStream*>(new (&_waveform) AudioSynthWaveform);
^
/tmp/build578ae2c22656d87e9d0d68db21416349.tmp/sketch/oscillator.h:17:68: note: candidate is:
In file included from /opt/arduino-1.6.7/hardware/teensy/avr/cores/teensy3/Printable.h:25:0,
from /opt/arduino-1.6.7/hardware/teensy/avr/cores/teensy3/Print.h:39,
from /opt/arduino-1.6.7/hardware/teensy/avr/cores/teensy3/Stream.h:24,
from /opt/arduino-1.6.7/hardware/teensy/avr/cores/teensy3/HardwareSerial.h:169,
from /opt/arduino-1.6.7/hardware/teensy/avr/cores/teensy3/WProgram.h:16,
from /opt/arduino-1.6.7/hardware/teensy/avr/cores/teensy3/Arduino.h:1,
from /tmp/build578ae2c22656d87e9d0d68db21416349.tmp/sketch/Synthesizer.ino.cpp:1:
/opt/arduino-1.6.7/hardware/teensy/avr/cores/teensy3/new.h:12:8: note: void* operator new(size_t)
void * operator new(size_t size);
^
/opt/arduino-1.6.7/hardware/teensy/avr/cores/teensy3/new.h:12:8: note:   candidate expects 1 argument, 2 provided
exit status 1
no matching function for call to 'operator new(sizetype, AudioSynthWaveform*)'

Таким образом, похоже, проблема в том, что в основных библиотеках Teensy новое не определено — оператор ожидает только один аргумент, а не два.

Если я определю свою собственную реализацию размещения новых в файле «.h», например, так и включу его в заголовочный файл вышеупомянутого класса:

#ifndef NEW_H
#define NEW_H

void *operator new(size_t size, void *ptr){
return ptr;
}

void operator delete(void *obj, void *alloc){
return;
}

#endif //NEW_H

Кажется, это работает, но только если я использую размещение нового в методе в файле заголовка. Я получаю похожую ошибку, когда ожидается только один аргумент, если я перенесу код из заголовка в файл реализации «.cpp».

Есть ли способ решить эту проблему?

2

Решение

Я нашел самый простой способ решить эту проблему — просто открыть

/opt/arduino-1.6.7/hardware/teensy/avr/cores/teensy3/new.h

И поставить прототипы

void *operator new(size_t size, void *ptr);

void operator delete(void *obj, void *alloc);

существует многократная перегрузка оператора, а затем функции в связанном файле .cpp.

Не уверен, почему это не было включено с самого начала …

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]