У меня есть HashTable < Клиент> как участник другого класса.Почему компилятор считает, что мое объявление объекта является объявлением функции?
Конструктор для HashTable < T> принимает значение int, чтобы определить размер массива HashTable.
HashTable(int numItems) { ... } //constructor
Следующая декларация
HashTable<Customer> customers(10000); //doesn't call constructor???
получает ошибку «ожидается спецификатор типа» под 10000. Когда я извлекаю 10000, я получаю сообщение об ошибке «Определение функции для клиентов не найден.» Это заставляет меня думать, что компилятор обрабатывает мое объявление объекта как объявление функции.
Когда я заявляю о своем HashTable с использованием динамического распределения,
HashTable<Customer> * customers = new HashTable<Customer>(10000); //works
нет никакой путаницы с компилятором.
Почему динамическое распределение работает, но не другое?
Редактировать: Вот минимальный код, который имеет такую же проблему, как указано выше.
#ifndef _BUSINESS_LOGIC
#define _BUSINESS_LOGIC
#include "HashTable.h"
class BusinessLogic
{
public:
BusinessLogic();
~BusinessLogic();
void start();
private:
HashTable<int> * custom = new HashTable<int>(10000); //works
HashTable<int> customers(10000); //error
};
#endif
#ifndef _HASH_TABLE
#define _HASH_TABLE
template<class T>
class HashTable
{
public:
HashTable(int numItems) {
if (numItems <= 0) {
throw std::invalid_argument("Invalid HashTable size");
}
currItems = 0;
//B must be the next prime after 2 * numItems
B = numItems;
}
~HashTable() {
}
private:
int B; //size of itemArray
};
#endif
Является ли декларация «клиентов» внутри класса? – 1201ProgramAlarm
Трудно сказать, что не так с битами и кусками кода. Пожалуйста, опубликуйте [mcve]. –
http://stackoverflow.com/questions/31574575/how-is-this-a-most-vexing-parse –