Добрый день! Я студент технического вуза и самостоятельно пытаюсь выучить c++. Что пытаюсь сделать :
Что у меня в IDE:
int main()
{
vector<string> philosopher = { "Kant", "Plato","Hume","Kierkegaard" };
return 0;
}
Что показывает мне компилятор на попытку собрать решение:
Мои #include:
#include<iostream>
#include<fstream>
#include<sstream>
#include<cmath>
#include<cstdlib>
#include<string>
#include<list>
#include<vector>
#include<algorithm>
#include<stdexcept>
Я могу просто определить вектор строк и с помощью метода push.back() добавить туда строку. Но вот так создать вектор у меня не получается, хотя вышеуказанный пример из книги Страуструпа. Я что-то делаю не так?
Заголовочный файл - книжный. Автор книги говорит добавлять его во все программы и потом объяснить его назначение. Ссылка - введите сюда описание ссылки
Вот как оно должно выглядеть
// прекомпилированный заголовочный файл (в студии используется по-умолчанию)
// должен быть первым
#include "stdafx.h"
// все инклюды, требуемые этому файлу, перечисляются прямо в этом файле, а не где-то еще
#include <string>
#include <vector>
int main()
{
::std::vector< ::std::string > philosopher = {"Kant", "Plato", "Hume", "Kierkegaard"};
// альтернативный вариант
// чтобы нормально подхватить vector и string не указывая префикс каждый раз
using namespace std;
vector<string> philosopher = {"Kant", "Plato", "Hume", "Kierkegaard"};
return 0;
}
В том заголовочном файле, который вы используете, Страуструп подменяет вектор своим - он кое-чем отличается, в частности, он генерирует исключения при выходе за границы в операторе []
.
Так вот, в этом его классе нет конструктора, который умеет работать со списком инициализации.
В тексте Страуструп показывает работу со стандартным вектором.
У вас наблюдается мешанина из современной книги по С++ (С++11 и позже) и старинных заголовочных файлов, не совместимых с современным С++ (написаны для С++98-С++03). Обратите внимание на комментарий в файле: "Revised April 25, 2010". В то время как вы пытаетесь использовать свойство языка, которое появилось только в 2011 году.
Ошибка возникает из-за
#define vector Vector
во включенном вам заголовочном файле. При этом интерфейс суррогатного класса Vector
грубо не соответствует современным требованиям языка. Страуструп в свое время сильно "напортачил" с этим std_lib_facilities.h
, что вызвало большое количество ошибок и вопросов. Старайтесь избегать учебных курсов по современному С++, опирающихся на этот std_lib_facilities.h
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Сначала получал дескриптор статика и использовал setwindowtext, но почему-то не робит
Некоторые авторы используют два двоеточия ("::") перед неймспейсом std, например:
Autoit работает хорошо, но c++ читает первый символ, как быть?