2016-04-19 2 views
2

Я хотел бы использовать шаблон std::add_pointer<type> из заголовка C++ <type_traits> для создания указателя на тип массива.C++ add_pointer шаблон с типом массива

Однако следующее генерирует ошибку

double *y[2]; 
std::add_pointer<double[2]>::type x; 
y = x; // generates error 

Мой компилятор MSVC C++ поставляется с SDK 7.1 говорит

ошибка C2440: '=': не удается преобразовать из «двойной (*) [2 ]»в 'двойной * [2] там нет преобразования в типах массивов, хотя есть преобразования в ссылки или указатели на массивы

Что я могу здесь пропустить?

EDIT: Я хочу, чтобы y являлся 2D-массивом с одним размером 2 и другой переменной. Использование по назначению является

y[i][0] и y[i][1]

+0

Одним из них является массив указателей, а другой является указателем на массив. Не то же самое. –

ответ

1

y и x не имеют одинаковый тип здесь.

Как сказано в сообщении об ошибке, y представляет собой массив с элементами типа double*. x - указатель, указывающий на массив с типом double[2].

Вы можете изменить тип y на:

double (*y)[2]; 
std::add_pointer<double[2]>::type x = new double[2][2]; 
y = x; 
// use y[0][0], y[0][1], y[1][0] ... 
delete[] y; 

LIVE

+0

Хорошо, я получил это сейчас :). Вы, конечно, правы. Он должен читать double (* y) [2]. –

+0

@ AndreasH. Вы можете использовать 'y' с' y [0] [0] ',' y [0] [1] '... См. Мою обновленную демо-версию. – songyuanyao

+0

@ AndreasH. Рад может помочь. :) – songyuanyao

Смежные вопросы