У меня есть два класса A и B. A - это шаблонный класс, и он имеет конструктор с одним целым аргументом. А другой класс B использует экземпляр экземпляра с аргументом int template. Теперь проблема в том, что он говорит "Тип", когда я скомпилирую программу.
Вот программа.
template <typename T>
class A
{
public:
A(std::size_t max_size)
{
}
};
class B
{
A<int> list(100);
};
Я получаю проблему компиляции в
A<int> list(100);
линия.
Заранее спасибо.
Когда компилятор анализирует линию
A<int> list(100);
он думает, что вы пытаетесь объявить функцию с именем list
, тип возврата которой A<int>
. Он пытается проанализировать содержимое в скобках, чтобы найти типы аргументов, значения по умолчанию и т.д. Он ожидает найти тип, но вместо этого он найдет число
Я предполагаю, что вы хотели использовать:
A<int> list[100];
который объявляет list
массивом из 100 A<int>
s.
Если вы хотели использовать 100
в качестве параметра для конструктора A<int>
, вам нужно будет использовать:
class B
{
B() : list(100) {}
A<int> list;
};
std::size_t
, а не создавать массив.
изменить это
A<int> list(100);
к примеру
A<int> list<int> li(100);
т.е. указать тип (здесь я упомянул int
)
A<int> list{100}
, copy-initializaionA<int> list = A<int>(100)
или прямую инициализацию через список инициализатора элемента:B() : list(100) {}
. Элементы данных не могут быть инициализированы так, как вы это сделали.