Ошибка при создании указателя на объект шаблона: «значение `num` невозможно использовать в постоянном exp»

#c

#c

Вопрос:

Я пытаюсь создать указатель на объект шаблона, используя его конструктор:

 int num = 10;
templateClass<int>* testPInt = new templateClass<num>;
 

Когда я компилирую программу:

 error: the value of `num` is not usable in a constant expression
 

Как мне это решить? я имею в виду, что experssion не является постоянным :/

Комментарии:

1. Вы не можете этого сделать. C так не работает. Параметры шаблона должны быть постоянными выражениями.

2. Я вижу, поэтому мне нужно создать еще один const int num2 = num; Затем я должен присвоить его параметру шаблона wooh..

3. Нет, это тоже не сработает. Здесь «constant» действительно означает constant, что означает «известный во время компиляции». Можете ли вы сказать мне, что именно происходит num во время компиляции? Если вы не можете дать мне конкретное числовое целое значение прямо сейчас , оно не является постоянным значением для целей, когда оно является параметром шаблона.

4. @SamVarshavchik: это был неправильный дубликат. Шаблон шаблонизирован для типа ; они просто случайно передали значение в качестве параметра шаблона, а не в качестве аргумента конструктору. Он предназначен для создания шаблона int , а не для включения 10 .

5. Давайте просто подождем, пока OP прояснит. Я считаю, @ShadowRanger, что это был просто упрощенный пример, и OP пытается предоставить непостоянный параметр шаблона. Если OP прояснит, и это то, что спрашивается, тогда я удалю дубликат, вот и все.

Ответ №1:

Предполагается, что ваш класс шаблонен для типа ( int ), а не для значения ( 10 ); ваша проблема в том, что вы пытаетесь передать значение как шаблонный тип. Просто сделайте:

 templateClass<int>* testPInt = new templateClass<int>(num); // <-- value passed as argument
                                              // ^^^ type goes here
 

Тип известен во время компиляции, и значение может меняться во время выполнения.