Настройка компилятора "Книга изучения С ++" - PullRequest
3 голосов
/ 11 сентября 2011

Я только что получил эту книгу "Изучение 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 ]

5 голосов
/ 11 сентября 2011

not - это «альтернативный токен» для логического оператора !.

Возможно, ваш компилятор не поддерживает его.

Попробуйте вместо этого:

if (!in)

Действительно, здесь точно такая же проблема на другом сайте .

Компилятор VC по умолчанию не распознает альтернативные токены (в настоящее время они чрезвычайно редки), но я считаю, что эта поддержка может быть включена с помощью переключателя компилятора.

На самом деле Visual Studio требует, чтобы вы #include <ciso646> получили поддержку альтернативных токенов, хотя в стандарте C ++ говорится, что это не должно иметь никакого эффекта 1 . Непослушная Visual Studio!

В любом случае, вы можете найти лучший, более современный учебник.

Я рекомендую эти ресурсы .


1 [n3290: footnote 176]: В частности, включение стандартного заголовка <iso646.h> или <ciso646> не оказывает влияния.

0 голосов
/ 11 сентября 2011

Вы не должны использовать /za.Дело в том, что это вызывает многочисленные ошибки компилятора при включении, и более важные проблемы компилятора, такие как SFINAE, так или иначе не решаются, и некоторые заголовки, такие как заголовки Windows, не компилируются.

Технически, ключевое слово notиспользуется для оператора !.Вы можете обнаружить, что MSVC не поддерживает его, поэтому просто используйте ! напрямую.

0 голосов
/ 11 сентября 2011

Попробуйте

if (!in)

вместо

if (not in)

, поскольку это стиль кода, к которому привыкло большинство программистов C ++.

...