Как видно из заголовка, я хочу использовать некоторый буфер для класса QLineEdit с помощью интеллектуального указателя, но компилятор показывает «недопустимое применение 'sizeof' к неполному типу 'QLineEdit'». Я нашел файл «aligned_buffer.h», создав сообщение. но это беспомощно. Что меня смущает, так это то, что когда я использую тот же способ использования некоторого буфера для QTextEdit, компилятор работает успешно. почему QLineEdit не может использовать тот же способ сделать это?
...
shared_ptr<QTextEdit> t1 = make_shared<QTextEdit>(); // successd
shared_ptr<QLineEdit> t2 = make_shared<QLineEdit>(); // failed
...
...to incomplete type 'QLineEdit'
— явное указание на то, что компилятор не имеет ни малейшего представления о том, что такое QLineEdit во время компиляции этой строки исходного кода. Итак.. выяснить, почему. Отсутствует заголовок? Условно исключено препроцессором? Причин может быть сколько угодно, о которых мы могли только догадываться.
Включите заголовочные файлы правильно
#include <QTextEdit> // https://doc.qt.io/qt-5/qlineedit.html
#include <QLineEdit> // https://doc.qt.io/qt-5/qtextedit.html
#include <memory> //https://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared
int main(){
shared_ptr<QTextEdit> t1 = std::make_shared<QTextEdit>();
shared_ptr<QLineEdit> t2 = std::make_shared<QLineEdit>();
}
Может быть, вы забыли включить заголовок
QLineEdit
?