В моем программном обеспечении у меня есть треугольник, а страница содержит треугольник. Я хочу построить страницу, дающую ей треугольник плюс другие данные.Невозможно преобразовать параметр в конструктор из-за const
class Triangle
{
public:
const int **m_apVertex;
Triangle(const int * apVertex[])
{
m_apVertex=apVertex;
}
};
struct args
{
int ** vertices;
// ... other data
};
class Page
{
public:
Triangle m_t;
Page(const args conArgs):
//m_t(const_cast<const INT **>(conArgs.vertices))
m_t(conArgs.vertices)
{
}
};
void main()
{
args a;
Page p(a);
}
Компиляция завершаться:
error C2664: 'Triangle::Triangle(const int *[])' : cannot convert parameter 1 from 'int **const ' to 'const int *[]'
В качестве исправления я использую m_t(const_cast<const INT **>(conArgs.vertices))
, но я не знаю, почему он не будет работать без const_cast;
Поскольку вы передаете аргумент 'Page' конструктора с помощью' const', что делает 'conArgs.vertices' константа, которая отличается от массив указателей на константные целые числа (или не постоянный указатель (по мере того, как массивы распадаются на указатели) на указатели на постоянные целые числа). 'const int **' не совпадает с 'int ** const'. –
Таким образом, модификатор const в 'const args conArgs' в конструкторе страницы делает' conArgs.vertices'' типа 'int ** const' –
Да, это правильно. –