Ошибка компилятора C2106 при попытке симуляции вектора - PullRequest
0 голосов
/ 10 сентября 2010

Я пытаюсь написать фиктивный вектор для моего класса, и в настоящее время я получаю ошибку в функции-член pushBack Компилятору, похоже, не нравится увеличивать переменную SIZE, которая содержит количество элементов в «векторе». Что-то мне нужно исправить? Мы будем очень признательны вам за помощь в решении этой проблемы и любых других проблем, с которыми вы можете столкнуться.

/*
Write a simple program that simulates the behavior of vectors
-You should be able to add and remove elements to the vector
-You should be able to access an element directly.
-The vector should be able to hold any data type.
*/


#include <stdio.h>

template <class T, int SIZE>
class Vector
{
 #pragma region constructors&destructors
 private:
 T vec[SIZE];

 public:

 Vector()
 {}
 ~Vector()
 {}
 #pragma endregion

 template <class T/*, int SIZE*/>
 void defineVec(T var)
 {
  for(int i=0; i<SIZE; i++)
  {
   vec[i] = var;
  }
  //printf("All elements of the vector have been defined with %", var)
  //What should I do when trying to print a data type or variable 
                //of an unspecified one along with the '%'?
 }

 template <class T/*, int SIZE*/>
 void pushBack(T var)
 {
  SIZE ++; //C1205
  vec[SIZE - 1] = var;
 }

 template <class T/*, int SIZE*/>
 void popBack()
 {
  vec[SIZE - 1] = NULL;
  SIZE--;
 }

 //template <class T/*, int SIZE*/>
 void showElements()
 {
  for(int i=0; i<SIZE; i++)
  {
   printf("%d",vec[i]);
   printf("\n");
  }
 }
};

int main()
{
 Vector <int, 5> myints;
 myints.pushBack(6);
 myints.showElements();
 return 0;
}

1 Ответ

3 голосов
/ 10 сентября 2010

Вы передаете SIZE в качестве параметра шаблона. Внутри определения шаблона нетипизированный параметр шаблона в основном является константой, т. Е. Его нельзя изменить.

Вам нужно будет определить отдельную переменную, чтобы отслеживать, сколько памяти в вашем векторном буфере используется в настоящее время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...