Dyikot
@Dyikot

Почему автодополнение не предлагает мне поля структуры?

Я хочу в методе T& Top() const отослать Data. Но при _node[0]. не появлется элементы структуры. Что я сделал не так?
class PriotrityQueue : public Array<T>
{
public:
	PriotrityQueue() : Array<T>(1), _node(new Node[_capasity]), _level(0) {}

	~PriotrityQueue()
	{
		delete[] _node;
	}

	struct Node
	{
		T Data;
		unsigned int Priority;

		Node():Data(T{}),Priority(int{}) {}
		Node(const T& data, const unsigned int priority = 0) :Data(data), Priority(priority) {}
	};

	T& Top() const
	{
		return _node;
	}
private:
	using Array<T>::_size;
	using Array<T>::_capasity;
	Node* _node;
	int _level;
};
  • Вопрос задан
  • 77 просмотров
Пригласить эксперта
Ответы на вопрос 2
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Вы хотите вернуть T. У Node - это член Data. Вот и возвращайте _node->data, или какой там у вас смысл у _node. Пока странно, вы наследуетесь от Array, но никак его не используете. По идее надо возвращать первый элемент в массиве.

Да, еще, по английски правильно capaCity, а не capaSity.
Ответ написан
@code_panik
Это особенность работы IntelliSense в Visual Studio. Более того, если в коде
template<typename T>
struct Outer {
  struct Node {
    int data;
  };
  void foo() { node.data; }
  Node node;
};

навести курсор на data внутри функции foo, скорее всего, получим подсказку <unknown> Outer<T>::Node::data, где unknown - тип, который не удалось вывести.

IntelliSense позволяет подставить в шаблонный параметр значение конкретного типа. Для этого значение опции Template IntelliSense: Tools > Options > C/C++ > Advanced > IntelliSense > Enable Template IntelliSense должно быть true. Демонстрация работы функции: 1, 2, 3.

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы