Вопрос по #include <> в VS2005
пропятся проекта - С/C++ - генеральный - адитионал инкулуд директорис
project->properties->c/c++->general->additional include directories
ЫЫЫЫЫ
Причем соотв файл (если брать от файла, в котором это написано) существует.Кажется, это берётся не от файла, где написано, а от корня проекта.
А в какой переменной окружения это все хранится?
А то каждый раз захожу туда, а там поле пустое (хотя ошибки компиляции пропадают)
Еще такой вопрос: iostream.h - вроде бы системная библиотека, однако на нее компилятор тоже жалуется, что нет такого файла
И еще: где брать mpi.h? Надо что-то дополнительно ставить?
mpi.h это уже жопа для распараллеливания
гугли =)
Только вот не может так быть, что в VS6 расширение было нужно, и нельзя ли поведение инклюда опцией изменить?
mpi.h нашелся в соседней папке - надо было еще одну подключить.
Насчет пустого поля - папку с корнем проекта в тот список студия почему-то не добавила, но соотв ошибки пропали - мб тоже где галочка есть...
iostream.h - это уже тыщу лет как deprecated-фича.
По стандарту:
если пишут #include <> то ищется в местах, определяемых компилятором
Если пишут #include "" то ищется способом, определяемым компилятором
//сцуко PDF копи-пэйст не даёт сделать
в местах, определяемых компиляторомтак способ тоже должен существовать
способом, определяемым компиляторомтак места-то тоже должны существовать
вроде инклюд работает и без new-line ? =)
или я путаю си и си++ ?
это требование для спецификации случаев, когда инклюд - последняя строка в файле. не все правильные текстовые редакторы заканчивают файл new-line
не знаю, как лучше
Мне дали готовый проект разбираться, с чем его едят - надо будет кое-что под него дописать.
Проект большой и даже если я захочу его переписать, мне никто не даст - это все не мое.
Я учту, но скорее всего в этом проекте это уже не будет меняться.
iostream.h - это уже тыщу лет как deprecated-фича.
А ты бы его файнридером
//сцуко PDF копи-пэйст не даёт сделать
Просто видимо все необходимые файлы для mpi уже включены в проект.
как это ты mpi нашел?
научи
Посмотрел мсдн по этому поводу - там примеры именно с расширением.
попробуй <iostream> без расширения.
Мб где-то опция есть или еще что.
А то вариант замены во всех файлах не нравится, тем более, что не факт, что он правильный...
Хотя есть хидеры и с расширением .h.
Уж не знаю, зачем так сделано.
Мб кто-нибудь знает быстрый способ, как можно подружить файлы с хидерами без расширения с указанием инклюда с расширением?
А то получается, что если с исходниками надо будет работать под VS6/под Линуксом, придется опять переделывать
Да и не хочется вносить изменения в файлы, которые поо логике трогаться вообще не должны.
Мб можно сделать что-то вроде файла мапинга?..
inline istream& operator >> (istream& istm, complex<PR>& ct)выдается ошибка C2143: syntax error : missing ';' before '&' .
Мб есть какие тонкости при переносе кода с VS6 на VS2005?
namespace std:: ?
В настройки проекта?
Но тогда получается, что с VS2005 VS6 по С++ не то, чтобы совместим
Или есть конвертер проектов?
а внутри <iostream> этого не сделано, поэтому нужно самому это написать.
действительно, чтобы перенести проект надо постараться
апдейт: я глюк
внутри <iostream.h> уже прописано using namespace std;
а внутри <iostream> этого не сделано, поэтому нужно самому это написать.
Так как исправить ситуацию?
Достаточно в основном файле (где main) в начале написать "using namespace std::"?
Не патчить же теперь хидеры все либ VS2005, которые используются в этом проекте
Или надо как-то иначе?
using namespace std;
Так куда его писать-то?
в тот контекст, где ты используешь методы или классы из пространства имен std.
То есть мне придется добавить их в каждый файл, где есть соотв инклюды?
но можно вписать эту строчку в самом конце iostream.h
(учитывая, что iostream.h - копия iostream)
=)
можно писать так:
#include <iostream>
int main
{
std::cout << "Hello, World!" << std::endl;
return 0;
}
а можно и вот так:
#include <iostream>
int main
{
using namespace std;
cout << "Hello, World!" << endl;
return 0;
}
Но наверное можно их создать.
Правда такое не с одним iostream.h - там с десяток таких инклюдов.
Всем спасибо, попробую...
У меня ошибка связана с тем, что компилятор не может найти файл, заданный в инклюде.
Или твои примеры эквивалентны этому?
#include <iostream.h>
int main
{
using namespace std;
cout << "Hello, World!" << endl;
return 0;
}
у тебя слишком много уйдет времени на конвертацию проекта. да и смысла в этом нет, потому что ты говоришь, что тебе не дадут менять проект, ибо он не твой.
А то получается, что если с исходниками надо будет работать под VS6/под Линуксом, придется опять переделывать
Небольший экскурс тут вроде еще не прозвучал. Раньше всякие С++ шняги типа сout лежали в хедерах
типа iostream.h, но потом решили, что cout и прочие стандартные плюсовые шняги будут лежать в пространстве std, а для их использования нужно включать iostream (без .h). Из соображений совместимости поддерживаются старые заголовки, в которых тот же cout лежит в глобальном пространстве имен. Пример содержательной части реального современного iostream.h
#ifndef _BACKWARD_IOSTREAM_H
#define _BACKWARD_IOSTREAM_H 1
#include "backward_warning.h"
#include <iostream>
using std::iostream;
using std::ostream;
using std::istream;
using std::ios;
using std::streambuf;
using std::cout;
using std::cin;
using std::cerr;
using std::clog;
Этот код выводит предупреждение во время компиляции, вставляет iostream и добавляет классы из него в глобальное пространство имен.
Проблема от того, очевидно, VS2005 отказалась от обратной совместимости.
Таким образом, если нормально проапдейтить проект, он будет собираться и в 6 студии, и в Линуксе.
поставь себе VS6.Так я уже написал, что так решил проблему.
Но на перспективу интересно узнать, какие сложности могут возникнуть при переходе с VS6 на VS2005 и переносе проектов.
А то везде(в том числе и в этом форуме) пишут, что для С++ стоит переходить с VS6 на VS2005 - что это дает свои преимущества.
А теперь получается, что недостатки вполне могут переввесить достоинства
Ясно, спасибо, попробую пнуть авторов проекта - мб учтут
Оставить комментарий
durka82
Есть файл кода на C++, в котором есть инклюд вида:Причем соотв файл (если брать от файла, в котором это написано) существует.
Однако при компиляции выдается сообщение
Корень проекта как раз "c:\prj\pmlp_test\".
Насколько я понимаю, мне надо где-то настроить, чтобы библиотеки искались и в "c:\prj\pmlp_test\".
Где это делается?