Как исправить эту ошибку? Ошибка C2440: ‘=’: невозможно преобразовать из ‘int (*) []’ в ‘int *’ & quot ;?

Это отличается от аналогичных вопросов, потому что я устанавливаю значение указателя на адрес, вместо того, чтобы пытаться назначить несовместимый тип … Я думаю.

template <class Type>
class ArrayStack
{
private:
int sz; // stack size
int asz; // array size (implementation)
Type* start; // address of first element
Type arr[]; // Might need to intialize each element to 0!?
public:
ArrayStack() { sz = 0; arr[0] = 0; asz = 0; start = &arr; }
/* other code... */
};

-1

Решение

start = arr; должен сделать свое дело.

  • Вы можете назначить массив указателю, и указатель будет установлен на начало массива.

Кроме того, спецификация пустого массива:

Type arr[];

Не уверен, что это значит. Вероятно, так же, как:

Type arr[0];

Более нормально:

Type arr[asz];

Конечно, размер массива должен быть постоянным.

0

Другие решения

Предложить использование std::vector<Type> arr вместо Type arr[],

template <class Type>
class ArrayStack
{
private:
int sz; // stack size
int asz; // array size (implementation)

// Type* start; // address of first element
// Don't need this at all.
// You can use &arr[0] any time you need a pointer to the
// first element.
std::vector<Type> arr;
public:

// Simplified constructor.
ArrayStack() : sz(0), asz(0), arr(1, 0) {}

/* other code... */
};
0

По вопросам рекламы [email protected]