Ожидайте спецификатор типа, когда экземпляр класса Templated используется в другом классе как переменная-член

0

У меня есть два класса 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);

линия.

Заранее спасибо.

  • 1
    Используйте унифицированную инициализацию A<int> list{100} , copy-initializaion A<int> list = A<int>(100) или прямую инициализацию через список инициализатора элемента: B() : list(100) {} . Элементы данных не могут быть инициализированы так, как вы это сделали.
  • 0
    Если это возможно, установка max_size вне ctor также будет работать. <Int> список; list.set_max_size (100);
Теги:
visual-c++

2 ответа

1
Лучший ответ

Когда компилятор анализирует линию

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;
};
  • 1
    Я думаю, что он хотел использовать конструктор, который принимает параметр std::size_t , а не создавать массив.
1

изменить это

A<int> list(100);

к примеру

A<int> list<int> li(100); 

т.е. указать тип (здесь я упомянул int)

  • 0
    Это не собирается компилировать.
  • 0
    Это не работает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню