"Изучение книги 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 3

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 не поддерживает его, поэтому просто используйте ! напрямую.