Я использую эту функцию для копирования одного вектора в конец другого:
template <typename T, typename U>
void addVectorToVector(std::vector<T>* oldVector, std::vector<U> input){
for(uint8_t i = 0; i < Input(size); i++){
T inputVar = (T) Input[i];
oldVector->push_back(inputVar);
}
return;
}
Это вызывает ошибку компиляции в Arduino IDE:
C:\Users\ehle_ta\AppData\Local\Temp\arduino_build_330682\sketch\main.ino.cpp.o: In function `std::vector<unsigned char, std::allocator<unsigned char> >::_M_check_len(unsigned int, char const*) const':
c:\program files (x86)\arduino\hardware\tools\arm\arm-none-eabi\include\c++\5.4.1\bits/stl_vector.h:1425: undefined reference to `std::__throw_length_error(char const*)'
collect2.exe: error: ld returned 1 exit status
Я могу сказать, что ошибка исчезает, когда я комментирую
oldVector->push_back(inputVar);
но я не понимаю, почему эта ошибка ссылки происходит.
редактировать:
Ошибка может быть вызвана компиляцией этого кода:
#include <vector>
void setup() {
std::vector<unsigned char> vector1;
std::vector<unsigned char> vector2;
vector2.push_back(0x01);
vector2.push_back(0x02);
addVectorToVector(&vector1, vector2);
}
// add the content of a vector to the end of another vector
template <typename T, typename U>
void addVectorToVector(std::vector<T>* oldVector, std::vector<U> input){
for(uint8_t i = 0; i < input.size(); i++){
T inputVar = (T) input[i];
oldVector->push_back(inputVar);
}
return;
}
Есть ли ошибка в моей реализации/использовании vector::push_back или возможно, что класс std::vector, который я использую, не является стандартным С++ 11 и, следовательно, вызывает проблемы?
Добро пожаловать в Stack Overflow! Пожалуйста, редактировать ваш вопрос с минимальный воспроизводимый пример или SSCCE (короткий, автономный, правильный пример)
как вы можете скомпилировать этот код? Input(size) это input.size() ? Input это input (но тип U и T при получении элемента)? Вы уверены, что предоставили нам исходный код, который вы скомпилировали, а затем связали? uint8_t для индекса — не лучший выбор.
Ошибка в том, что компоновщик не может найти функцию STL, которая выдает ошибку длины (судя по ее названию), а не саму ошибку длины. Это должно быть нарушение байт-кода в файлах STL .lib, поскольку отсутствует только часть STL.
Возможный дубликат Векторы в Ардуино и Полностью ли поддерживается C++ STL на Arduino?.
Как бы то ни было, это ошибка, которая обычно возникает при попытке скомпилировать/связать C++ исходный код с помощью C компилятора, что приводит к связыванию со стандартной C библиотекой, а не с C++ эквивалентом.
Я думал, что загадочное сообщение об ошибке было вызвано тем фактом, что Arduino не поддерживает систему C++ exception/try/catch. Я использую новую установку Arduino с надстройкой Teensyduino.
@tobeh вы не можете использовать std::vector в IDE arduino, не импортировав каким-либо образом стандартную библиотеку самостоятельно. См. комментарий О'Нила.





Попробуй это
template <typename T, typename U>
void addVectorToVector(std::vector<T>* oldVector, std::vector<U> &input)
{
for (int i = 0; i < input.size(); i++) {
T inputVar = (T) input[i];
oldVector->push_back(inputVar);
}
}
это, к сожалению, дает мне ту же самую ошибку
который правильно компилируется в C++, поэтому, возможно, есть ошибка ссылки
Спасибо, что попробовали это. Я предполагаю, что это ответ.
Что такое
Input? Это должно бытьinput? Что такоеInput(size)? Опубликуйте минимальный воспроизводимый пример. Почему нельзя использоватьvector::insert?