Я имею этот класс с методом экземпляра, названным открытым, и должен вызвать функцию, объявленную в C, также названном открытым. Следует за образцом:
void SerialPort::open()
{
if(_open)
return;
fd = open (_portName.c_str(), O_RDWR | O_NOCTTY );
_open = true;
}
Когда я пытаюсь скомпилировать его (использующий GCC), я получаю следующую ошибку:
error: no matching function for call to 'SerialPort::open(const char*, int)'
Я включал все необходимые заголовки C. Когда я меняю имя метода, например, open2, у меня нет не компиляции задач.
Как я могу решить эту проблему. Заранее спасибо.
Call
fd = ::open(_portName.c_str(), O_RDWR | O_NOCTTY );
The double colon (::
) перед именем функции является оператор разрешения области видимости C++ :
Если оператор разрешения находится в положении перед именем переменной, затем глобальная переменная затронута.
Проблема в том, что на самом деле это не то, как быстро работает. Quicksort - рекурсивный алгоритм, который должен вызываться только один раз вне себя. Идея заключается в том, что при каждой итерации массив разделяется на две половины - левая половина содержит все элементы, меньшие, чем ось вращения, а правая половина содержит все элементы, превышающие/равные оси вращения. Затем вы ускорите две половины и, наконец, положите ось в середине.
Если сторона быстрой сортировки имеет длину менее 3 элементов, можно просто поменять местами два элемента или оставить их, и эта часть массива будет выполнена.
Но не похоже, что ваш код делает это вообще - вы звоните Quicksort 6 раз от вашего клиента, и в рамках функции quicksort
вы делаете максимум один своп. Так что это не тот случай, когда кто-то сможет посмотреть на ваш код и отладить его, сказав вам перенести обмен или что-то еще. Вам нужно вернуться к своей логике.
Посмотрите диаграмму Википедии для наглядного примера того, что должно произойти в одной итерации:
http://en.wikipedia.org/wiki/File: Partition _ example.svg
-121--4222964- EventHandableList
используется классами, которые предоставляют большое количество событий для более эффективной обработки памяти, только выделяя пространство для Поэтому все события для основной формы хранятся там.
Я ожидаю, что дочерняя форма отслеживала, когда ее родитель может закрыться (это обычный случай использования) и она не отписалась от события FormClosing
или FormClosed
, когда она получила это событие. Однако, это всего лишь предположение. Чтобы подтвердить, просмотрите реализацию дочерней формы и найдите все случаи, когда она подписывается на события из родительской формы, а затем убедитесь, что имеется соответствующая отмена подписки на эти события.
Обновить
Обнаруженный обработчик меню, который не был удален, вполне может быть корнем проблемы. Попробуйте добавить вызов remove и проверьте, устранена ли утечка.
Запись :: открыть
вместо открыть
. Префикс ::
указывает, что имя должно быть взято из глобальной области. (Глобальное пространство имен? Я не уверен в его точном значении, если честно...)
добавить ":" до открытия (_portName. c_str(), O_RDWR | O_NOCTTY );