"Изучение книги C++" настройка компилятора
Я только что получил эту книгу " изучение C++", и я нахожусь на своем первом уроке. Я занимался C# в течение нескольких лет в качестве хобби, поэтому я подумал, почему бы не попробовать C++.
В книге говорится, что мне нужно настроить компилятор на использование стандартного C++. Я использую visual studio 2010, что я и сделал. http://msdn.microsoft.com/en-us/library/ms235629.aspx
Но когда я иду компилировать код, все работает нормально, за исключением одного оператора if.
Я трижды проверил, как указано, поэтому он должен будь что-нибудь с инструментами.
Конкретно
if (not in) // this line here
{
std::perror(argv[1]);
return EXIT_FAILURE;
}
Полный образец
#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
#include <ostream>
#include <string>
#include <vector>
void read(std::istream& in, std::vector<std::string>& text)
{
std::string line;
while (std::getline(in, line))
text.push_back(line);
}
int main(int argc, char* argv[])
{
std::vector<std::string> text;
if (argc <2)
read(std::cin, text);
else
{
std::ifstream in(argv[1]);
if (not in)
{
std::perror(argv[1]);
return EXIT_FAILURE;
}
read(in,text);
}
std::sort(text.begin(), text.end());
std::copy(text.begin(), text.end(),
std::ostream_iterator<std::string>(std::cout, "n"));
}
Я действительно хотел бы продолжить эту книгу, так что любая помощь будет очень признательна.
И я прошу прощения, если это ужасно нубиш с моей стороны.3 ответа:
not
является "альтернативным маркером" для булева оператора!
.Возможно, ваш компилятор не поддерживает его.
Попробуйте вместо этого:
if (!in)
Действительно, вотточно тот же вопрос на другом сайте .
Компилятор VC по умолчанию не распознает альтернативные токены (они чрезвычайно редки в настоящее время), но я полагаю, что эта поддержка может быть включена с помощью переключателя компилятора.
Фактически Visual Studio требует, чтобы Вы
#include <ciso646>
должны получить поддержку альтернативных токенов, даже если стандарт C++ утверждает, что это не должно иметь никакого эффекта1. Непослушная Visual Studio!В любом случае, вы можете захотеть найти лучший, более современный учебник.Я рекомендуюэти ресурсы .
1
[n3290: footnote 176]:
в частности, включение стандартного заголовка<iso646.h>
или<ciso646>
не имеет никакого эффекта.
Попробуйте
if (!in)
Вместо
if (not in)
Поскольку это стиль кода, к которому привыкло большинство программистов на C++.
Вы не должны использовать
/za
. Дело в том, что он вызывает многочисленные ошибки компилятора при включении, и более важные проблемы компилятора, такие как SFINAE, все равно не решаются, а некоторые заголовки, такие как заголовки Windows, не компилируются.Технически ключевое слово
not
используется для оператора!
. Вы можете обнаружить, что MSVC не поддерживает его, поэтому просто используйте!
напрямую.