Как использовать std :: array.size () в качестве параметра шаблона, когда у класса есть неконтекспр std :: arrayC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как использовать std :: array.size () в качестве параметра шаблона, когда у класса есть неконтекспр std :: array

Сообщение Anonymous »

Ниже приведен пример игрушки
Учащик класса имеет std :: array называется имя и an Интеллектуальное возраст . У студента есть функция -члена с именем encode , которая вызывает глобальную функцию шаблона Encode с использованием name.size () в качестве параметра шаблона.
the Код показан ниже: < /p>

Код: Выделить всё

//main.cpp
#include 
#include 

template 
unsigned long encode(unsigned long num2){
return num1 + num2;
}

struct student {
std::array name;
int age;
student(const std::array& name, int age):
name(name),
age(age)
{}
unsigned long encode(){
return ::encode(age);
}
};

int main(){
std::array name = {"Tim"};
student Tim(name, 17);
std::cout 
Однако это создает следующую ошибку компилятора < /p>
>g++ main.cpp -std=c++11

main.cpp: In member function 'long unsigned int student::encode()':
main.cpp:22:43: error: use of 'this' in a constant expression
22 |                 return ::encode(age);
|                                           ^
main.cpp:22:45: error: no matching function for call to 'encodestudent::name.std::array::size()>(int&)'
22 |                 return ::encode(age);
|                        ~~~~~~~~~~~~~~~~~~~~~^~~~~
main.cpp:9:15: note: candidate: 'template long unsigned int encode(long unsigned int)'
9 | unsigned long encode(unsigned long num2){
|               ^~~~~~
main.cpp:9:15: note:   template argument deduction/substitution failed:
main.cpp:22:45: error: use of 'this' in a constant expression
22 |                 return ::encode(age);
|                        ~~~~~~~~~~~~~~~~~~~~~^~~~~
main.cpp:22:42: note: in template argument for type 'long unsigned int'
22 |                 return ::encode(age);
Это требуется, я делаю :: encode (возраст) для решения этой проблемы, потому что я думал, что одно из основных преимуществ std :: array способен нести размер, а не хранить размер в какой -то дополнительной переменной (или жесткой кодировки размера). < /p>

Код: Выделить всё

g++ version: 14.1.0


Подробнее здесь: https://stackoverflow.com/questions/793 ... a-non-cons
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»