Я делаю пересылку деклараций в файлах заголовков и включая фактические файлы классов в cpp. Но я столкнулся с проблемами, когда классы шаблонный:Передовая декларация класса (sdk), содержащая шаблон
class MyClass {
public:
MyClass();
void aFunction();
private:
QList<int> m_member;
};
Чтобы получить его, чтобы построить мне нужно дать этот класс информацию о QList
. Я пробовал:
class QList;
error: template argument required for 'class QList'
Я пытался (потому что мне нужно будет только QList
целых чисел в данном классе):
class QList<int>;
error: specialization of 'QList<int>' after instantiation
Я посмотрел эти ошибки, но нашел только вопросы с людьми, имеющими проблемы при создании класса шаблонов, ничего не найдено о форвардных объявлениях.
Если ничего более не работает, я могу #include <QList>
в файле заголовка и отказаться от прямого объявления - но я хотел бы понять эту проблему.
Эта опция также предлагается в наиболее популярный вопрос о template classes forward declarations:
Просто
#include <list>
и не беспокоиться об этом.
Я не понимаю other answers ...
Если вы хотите, чтобы 'QList' как член вашего класса, полная декларация необходима в любом случае (потому что компилятор должен будет вычислить размер вашего класса). С помощью прямого объявления вы можете иметь указатели или ссылки, но не намного больше. –
@BoPersson, как он может это сделать, если размер списка неизвестен? – Thalia
Объект 'QList' всегда будет иметь тот же размер. «Int' в списке будет выделен отдельно. –