Я пытаюсь начать писать на C++ под FreeBSD, и сразу же столкнулся с проблемой, наверняка глупой.
Элементарный код:
#include <iostream>
using namespace std;
main () {
cout << "Hello World\n";
}
не компилится, и пишет, что не может найти iostream. Видимо в переменной окружения нужно прописать какие-то пути? Какие? Или что-то другое?
проверь ветку. скомпиль если че.
/usr/include/g++/iostream
У тебя наверное gcc совсем древний. Правильнее (в основном, с точки зрения стиля) писать так:#include <iostream>
using std::cout;
using std::endl;int main(int argc, char *argv[])
{
cout << "Hello World" << endl;
}g++ hello.cpp -o hello
asso спасибо, все нормально скомпилилось.
У меня была похожая проблема, ничего не хотело компилироаться :(
Полез в путь который было предложено проверить и я обноружил, что в /usr/includes нет g++, но есть c++/3.2/ ну а там уже есть иострим.... Какую версию g++ лучше всего поставить?
Никак не могу понять :( данный вариант у меня работает. НО, что еще нужно в будущем писать в using`е? Вот к примеру:
для работы с файлами подключил #include <fstream>
Не понравился компилятору оператор ifstream
написал using std::ifstream; заработало. Но не буду же я для всех операторов, которые вызываю писать юсинг... да и не уверен, что все будут работать.... Может кто подскажет , что делать?
Версия gcc - 3.2
>Никак не могу понять :( данный вариант у меня работает. НО,
>что еще нужно в будущем писать в using`е? Вот к примеру:
>
>для работы с файлами подключил #include <fstream>
>Не понравился компилятору оператор ifstream
>написал using std::ifstream; заработало. Но не буду же я для всех
>операторов, которые вызываю писать юсинг... да и не уверен, что все
>будут работать.... Может кто подскажет , что делать?
>Версия gcc - 3.2Лично меня этот gcc 3.2 со своими новыми особенностями уже задолбал. То одно ему не нравится, то другое. А разбираться просто времени нет, поэтому я дефалтовым компилером поставил gcc 2.95 - с ним все отлично компилиться. А что касается самого gcc 3.2, то у меня скомпилилось когда заменил #include <iostream> на #include <iostream.h> При этом даже не надо было указывать namespace:
//hello.cpp
#include <iostream.h>
main () {
cout << "Hello World\n";
}
//Компилил: g++ -o hello hello.cpp
Правда при этом g++ ругнулся, что <iostream.h> - это неправильно, и что надо <iostream>, но можно заставить его заткнуться опцией -Wno-deprecated:
g++ -o hello hello.cpp -Wno-deprecated
Почему оно так все запущено - не разбирался, не до этого сейчас, поэтому не уверен, что сработает у всех
>Почему оно так все запущено - не разбирался, не до этого сейчас,
>поэтому не уверен, что сработает у всехРазобрался :) По идее должно сработать у всех, хотя кто знает :)
P.S. strace наш друг!
>Лично меня этот gcc 3.2 со своими новыми особенностями уже задолбал.
>То одно ему не нравится, то другое. А разбираться просто времени нет,А зря. Не нравится ему, главным образом, код, не соответствующий
стандарту языка. История "возмужания" C++ длинная и сложная, много
есть старомодных фич, которых по уму следовало бы избегать, есть и
такие, использование которых уже сейчас помечено как "не рекомендуемое",
а то и грозящее "неопределённым" результатом.>поэтому я дефалтовым компилером поставил gcc 2.95 - с ним все отлично
>компилиться. А что касается самого gcc 3.2, то у меня скомпилилось когда
>заменил #include <iostream> на #include <iostream.h> При этом даже не
>надо было указывать namespace:
>
>//hello.cpp
>#include <iostream.h>
>main () {
> cout << "Hello World\n";
>}
>//
>
>Компилил: g++ -o hello hello.cpp
>Пример некорректного антикварного кода. Абсолютно весь runtime (и
унаследованный от C, и относящийся к C++) ныне запихали в std::,
дабы исключить возможные конфликты имён с пользовательскими
идентификаторами. По слухам, <stdio.h> через пару лет могут объявить
"deprecated", так что привыкайте к `#include <cstdio>` да std::printf()
:)У GCC 3.x серий, по крайней мере, стало существенно лучше с поддержкой
сложных шаблонов. 2.95.3, конечно, в некоем смысле эталон, но - эталон
старомодных практик C++-программирования. Которые в нём достигли своего
апогея как раз после того, как все серьёзные эксперты раскритиковали их
в пух и прах.А после `using namespace std` должно всё содержимое оного namespace'а
быть доступно. Так что шось у вас с вашей конкретной локальной установкой
GCC не то.
>>Лично меня этот gcc 3.2 со своими новыми особенностями уже задолбал.
>>То одно ему не нравится, то другое. А разбираться просто времени нет,
>
>А зря. Не нравится ему, главным образом, код, не соответствующий
>стандарту языка. История "возмужания" C++ длинная и сложная, много
>есть старомодных фич, которых по уму следовало бы избегать, есть и
>такие, использование которых уже сейчас помечено как "не рекомендуемое",
>а то и грозящее "неопределённым" результатом.А что именно зря? Реальная ситуация - открыли свою конторку, весь софт сгоряча
решили писать сами, программировать умеют трое, реально рассчитывать можно на
двоих. Весь год сплошной аврал. Програмлю я уже довольно давно и у меня своих
наработок с мегабайт исходного текста еще с ДОС-овских времен. Естественно я время
от времени эти наработки использую и естественно там сплошь и рядом "старомодные
фичи". И вот мне надо что-то срочно сделать, а у gcc 3.2.x понимаешь ли теперь
"новомодные фичи" появились. Помоему вполне естественное решение вернуть старый
добрый gcc 2.95, а "разборки" с gcc 3.2 отложить до более подходящего момента.
>>поэтому я дефалтовым компилером поставил gcc 2.95 - с ним все отлично
>>компилиться. А что касается самого gcc 3.2, то у меня скомпилилось когда
>>заменил #include <iostream> на #include <iostream.h> При этом даже не
>>надо было указывать namespace:
>>
>>//hello.cpp
>>#include <iostream.h>
>>main () {
>> cout << "Hello World\n";
>>}
>>//
>>
>>Компилил: g++ -o hello hello.cpp
>>
>
>Пример некорректного антикварного кода. Абсолютно весь runtime (и
>унаследованный от C, и относящийся к C++) ныне запихали в std::,
>дабы исключить возможные конфликты имён с пользовательскими
>идентификаторами. По слухам, <stdio.h> через пару лет могут объявить
>"deprecated", так что привыкайте к `#include <cstdio>` да std::printf()
>:)
>
>У GCC 3.x серий, по крайней мере, стало существенно лучше с поддержкой
>
>сложных шаблонов. 2.95.3, конечно, в некоем смысле эталон, но - эталон
>старомодных практик C++-программирования. Которые в нём достигли своего
>апогея как раз после того, как все серьёзные эксперты раскритиковали их
>в пух и прах.
>В принципе спасибо за лекцию, только я уже сам более или менее во всем разобрался -
читать вроде еще не разучился, да и Интернет всегда под рукой:))) И даже потихоньку
правлю кое-какой код. Благо мой 2.95.4 и с большинством "новых фич" работает
нормально :)))Да и насчет iostream.h - для полноты картины, вы забыли упомянуть, что там есть строки
#include <iostream> и using std::cout
- поэтому оно все и сработало. ;-)
>А после `using namespace std` должно всё содержимое оного namespace'а
>быть доступно. Так что шось у вас с вашей конкретной локальной установкой
>
>GCC не то.А это вы к чему и о чем? Я вроде ни на что подобное не жаловался :)))
>В принципе спасибо за лекцию, только я уже сам более или менее во всем
>разобрался - читать вроде еще не разучился, да и Интернет всегда подПриятно встретить человека, который не разучился читать - а то нынче
развелось неграмотных - ANY KEY на клавиатуре найти не могут :).>рукой:))) И даже потихоньку правлю кое-какой код. Благо мой 2.95.4 и с
>большинством "новых фич" работает нормально :)))http://boost.sourceforge.net/regression-logs/cs-Linux.html
Можно сравнить 2.95.3 с набором прочих компиляторов по сугубо
формальным признакам.>Да и насчет iostream.h - для полноты картины, вы забыли упомянуть,
>что там есть строки #include <iostream> и using std::cout
>- поэтому оно все и сработало. ;-)Как обычно - все зависит от компилятора. Он вовсе не обязан именно
так реализовывать "старомодный" STL. Есть, например, весьма культурный
компилятор от HP под названием aCC, так вот у него #include <iostream>
и #include <iostream.h> в одной программе приводит к килограмму ошибок
на линковке. И это вполне допускается стандартом.> А это вы к чему и о чем? Я вроде ни на что подобное не жаловался :)))
Перечитайте исходное сообщение от некоего Grinder.
>>Да и насчет iostream.h - для полноты картины, вы забыли упомянуть,
>>что там есть строки #include <iostream> и using std::cout
>>- поэтому оно все и сработало. ;-)
>
>Как обычно - все зависит от компилятора. Он вовсе не обязан именно
>
>так реализовывать "старомодный" STL. Есть, например, весьма культурный
>компилятор от HP под названием aCC, так вот у него #include <iostream>
>и #include <iostream.h> в одной программе приводит к килограмму ошибок
>на линковке. И это вполне допускается стандартом.Перечитайте исходное сообщение от некоего Grinder. Речь шла о gcc :)))
>> А это вы к чему и о чем? Я вроде ни на что подобное не жаловался :)))
>
>Перечитайте исходное сообщение от некоего Grinder.Ну так и ответили б некоему Grinder - я то тут причем??? :)))
>Перечитайте исходное сообщение от некоего Grinder. Речь шла о gcc :)))
>А Вы собираетесь писать не на C++, а на некоем специальном GNU C++?
Тогда Вас погубит команда GCCшных же разработчиков - они почему-то
не очень-то серьёзно воспринимают "проблемы" обратной совместимости
со старыми глюками, а ориентируются на стандарт :).
>>Перечитайте исходное сообщение от некоего Grinder. Речь шла о gcc :)))
>>
>
>А Вы собираетесь писать не на C++, а на некоем специальном GNU
>C++?
>Тогда Вас погубит команда GCCшных же разработчиков - они почему-то
>не очень-то серьёзно воспринимают "проблемы" обратной совместимости
>со старыми глюками, а ориентируются на стандарт :).Нда... Куда нас понесло-то. Вы случайно учителем в школе не работаете? Или в ВУЗ-е
каком? :))) Вообще говоря речь шла о конкретных проблемах с конкретным компилятором
и давались советы как это дело победить и речь шла опять же о конкретном
компиляторе. Мой самый первый пост (тред номер 6) - это не критика и не вопрос, а
просто констатация факта - ну в самом деле задолбал меня этот gcc 3.2, пока был
дефалтовым компилером. Вы же непонятно с чего сделали какие-то странные выводы о
том на чем я там собираюсь писать и непонятно зачем запостили чуть ли не статью о
новых стандартах написания программ на С++. Отдавая должное вашей эрудиции и
знаниям, мне все же показалось, что ваш пост номер 8 был несколько не в тему,
поскольку адресовался лично мне, а я ни о чем подобном не спрашивал, так как
считаю, что с такими вещами вполне могу разобраться самостоятельно.
P.S. А клавишу ANY KEY я у себя тоже не нашел. Может подскажете где ее поискать:)))