Невозможно передать вектор как параметр С++

Я пробовал это на С++:

#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>

int add(vector<int>& nums) {

}

Но IntelliSense говорит мне, что «вектор идентификатора не определен». Я пытаюсь создать функцию, в которой в качестве аргумента передается вектор. Наверное, я делаю что-то очень глупое. Это отдельный файл C++ из моей основной программы.

попробуйте добавить using std::vector; перед add   —  person Tiernan Watson    schedule 17.12.2015

Кроме того, постарайтесь не слишком полагаться на intellisense. Иногда зависает, иногда не обновляется в реальном времени. Настоящий тест — это компиляция. Скомпилируйте его и посмотрите ошибки компилятора.   —  person Tiernan Watson    schedule 17.12.2015

Кроме того, попробуйте прочитать больше о namespaces. Это поможет и в следующий раз, на этот раз больше, чем просто добавление std:: где-нибудь.   —  person Tiernan Watson    schedule 17.12.2015

См. также:  структура typedef в определении структуры файла заголовка в файле c
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. Tiernan Watson

    Вы должны определить пространство имен: std::vector.

    Пожалуйста, по возможности избегайте using namespace, так как это может легко привести к конфликтам имен (и, если используется в заголовках, загрязнить все глобальное пространство имен).

    Спасибо. Также при написании прототипа в заголовочном файле кажется странным снова включать ‹vector›. Это единственный способ сделать это? Делая #include ‹vector›, а затем создавая прототип? person Tiernan Watson; 17.12.2015

    Предполагая, что вы имеете в виду объявление функции: да, вы должны включить <vector> перед использованием идентификатора std::vector, потому что стандартные контейнеры не могут быть предварительно объявлены</ а>. Вам не нужно снова включать его в файл .cpp. Однако я бы рекомендовал всегда включать заголовки, если вы не находитесь в соответствующем файле .hpp/.cpp, потому что включенные заголовки являются деталями реализации и могут измениться (и вы не хотите, чтобы такие изменения нарушали ваш код). person Tiernan Watson; 18.12.2015

    Можно ли сказать, что это хорошо написанный код? У меня есть заголовочный файл для функции добавления (только чтобы я мог изучить эти вещи), содержащий однострочный прототип без тела. В него я включил ‹vector›, а затем добавил add.h в файл add.cpp с телом функции добавления. Затем в свой основной файл cpp я снова включил add.h. Я исхожу из фона C #, поэтому кажется, что я включаю слишком много, но это может быть только я. person Tiernan Watson; 18.12.2015

    @TiernanWatson Заголовок должен быть полностью автономным и включать в себя все, что ему нужно для работы. Все что нужно и ничего больше. Если вы должны рассчитывать на то, что заголовок будет включен до того, как будет включен ваш заголовок, пользователи вашего заголовка (которые могут включать вас) будут тратить время на отладку непропорционально времени, затраченному на обеспечение полноты заголовка. И как только они это выяснят, вы знаете, кто поймает вину. person Tiernan Watson; 18.12.2015

    @TiernanWatson Обычно для одной функции вы не собираетесь возиться с заголовочным файлом. Реализуйте функцию выше всех применений функции в одном файле, и все готово. Если эта одна функция используется многими другими файлами, теперь у вас есть повод для заголовка. В этом случае у вас обычно будет не одна функция, а целая библиотека функций и определений типов данных. person Tiernan Watson; 18.12.2015

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: