Синтаксическая ошибка: массив векторов в OO C ++ - PullRequest
3 голосов
/ 05 октября 2011

У меня есть набросок класса HashTable, который я пытаюсь создать. Я получаю 3 сообщения об ошибках из Visual Studio, но я не вижу проблемы здесь. Я довольно новичок в ОО в С ++, поэтому, наверное, я что-то пропустил. Он утверждает, что есть проблема с моим массивом векторов. Ошибки:

error C2143: syntax error : missing ';' before '<'  line 10
error C2238: unexpected token(s) preceding ';'  line 10
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int   line 10

Вот мой полный класс, сейчас он довольно пустой:

#include <iostream>
#include <vector>
#include "stdafx.h"
using namespace std;

class HashTable
{
private:
  const static int buckets = 100;
  vector<int> hashTable[buckets];    //Internal storage

  int hash(int toHash);   //Performs hash function

public:
  HashTable();   //Constructor
  HashTable(int s);   //Constructor
  ~HashTable();   //Destructor

  void add(int toAdd);    //Adds an element to the HashTable
  void remove(int toDelete);    //Deletes an element from the HashTable
  bool search(int toSearch);    //Returns true if element in HashTable, false otherwise
  int getSize();   //Returns size of HashTable
  void print();    //Prints current state of the hashtable

  //TODO more methods...?




};

//Definitions...

HashTable::HashTable() 
{
}

HashTable::~HashTable() 
{
    //cout << "Destroyed" << endl;
}

void HashTable::add(int toAdd)
{

  //elements[hash(toAdd)] = toAdd;

}

void HashTable::remove(int toDelete)
{

}


bool HashTable::search(int toSearch)
{

}

int HashTable::getSize()
{
  //return size;
}


void HashTable::print()
{

}


int main()
{  

  return 0;
}

1 Ответ

4 голосов
/ 05 октября 2011

C ++ здесь действителен (как только вы заполните пустые функции). Проблема в том, как Visual C ++ использует предварительно скомпилированные заголовки. Когда вы используете предварительно скомпилированные заголовки (настройка по умолчанию), компилятор Visual C ++ ожидает, что первая строка каждого файла реализации будет #include "stdafx.h", и не компилирует ничего, что появляется до этого.

Это означает, что включение <vector> в ваш код игнорируется, поэтому компиляция vector<int> вызывает ошибку.

Если вы переместите строку #include "stdafx.h" наверх, это должно скомпилироваться. Или вы можете отключить скомпилированные заголовки в настройках проекта.

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