C ++ HashTable, две одинаковые реализации, но одна выдает ошибку - PullRequest
0 голосов
/ 14 сентября 2018

Код ниже выдает эту ошибку:

class HASHTABLE
{
public:
  const int DIMENSION = 10;
  struct NODE
  {
     char* INFO;
     NODE* LINK;
  };
  NODE arr1[DIMENSION];
};


int main()
{
  const int dimension=10;
  struct node
  {
    char* info;
    node* link;
  };
  node arr2[dimension];
};

Итак, код в int main() не дает ошибок, но код в class HASHTABLE, когда я объявляю NODE arr1[DIMENSION]; Я получаю ошибку: int(10) a nonstatic member reference must be relative to specific object.

Решение очевидно, просто поставьте static const int DIMENSION = 10;, и я не получаю ошибок.

Но насколько я понимаю C ++, этот код в main и class одинаков.

Может кто-нибудь объяснить, что происходит за кулисами?

Кроме того, я надеюсь, что понимаю это:

Если я объявлю DIMENSION как статический объект, каждый объект, который я создаю с использованием HASHTABLE, будет также иметь тот же DIMENSION, но я думал, что он был защищен с помощью const?

1 Ответ

0 голосов
/ 14 сентября 2018

Но насколько я понимаю c ++, этот код в основном и в классе одинаков.

они разные.для случая класса, если вы не добавляете static, каждый экземпляр HASHTABLE имеет свое собственное DIMENSION.

Я обнаружил, что const static требуется, если вы хотите сделать это внутри class.Я предполагаю, что ошибка компиляции из-за того, что компилятор не может определить значение DIMENSION, если DIMENSION не объявлено как static.

я думал, что это было защищено с помощью const

const, чтобы предотвратить запись переменной.Но static в классе - это объявление общей переменной между экземплярами.

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