Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > includes


Автор: sol78 30.4.2008, 17:18
сколько времени работаю в MS 6 ни как не могу понять как и почему нужно использовать 
стандартные библиотеки, а именно  их вклучения
Вот наример:
Я хочу использовать и библиотеку string & iostream
я пишу так:
Код

#include <iostream>
#include <string>
use namespase std;

вылетает на компиляции
RTOC.CPP
X.CPP
d:\microsoft visual studio\vc98\include\iosfwd(145) : error C2143: syntax error : missing ';' before '='
d:\microsoft visual studio\vc98\include\iosfwd(147) : error C2059: syntax error : '=='
d:\microsoft visual studio\vc98\include\iosfwd(149) : error C2059: syntax error : '<'
d:\microsoft visual studio\vc98\include\iosfwd(169) : error C2059: syntax error : '=='

откуда этот include \ iosfwd - я его не делала, интересное дело отлично компелириется в MS 2005
Что делать?
И так вооще  в этом разобраться???

Автор: vinter 30.4.2008, 17:25
namespace
правда в 6 вижуале не поддерживается стандарт и нет namespace'ов

Автор: MAKCim 30.4.2008, 17:28
Цитата(sol78 @  30.4.2008,  17:18 Найти цитируемый пост)
я пишу так:

Код

using namespace std;

Автор: sol78 30.4.2008, 17:38
извините за опечатку д/б
Код

#include <iostream>
#include <string>
using namespace std;


вопрос остался!

Добавлено через 2 минуты и 7 секунд
vinter,  так я в визуале 6 и работаю, как быть?

Автор: vinter 30.4.2008, 18:21
Цитата(sol78 @  30.4.2008,  18:38 Найти цитируемый пост)
vinter,  так я в визуале 6 и работаю, как быть?

меняй компилятор smile
Код

#include <iostream.h>

как там обозвали string я не знаю

Автор: sol78 30.4.2008, 20:58
не помогло, колличество ошибок увеличелось в 2 раза(((
Хелп! кто то еще пишет в MVS 6????

Автор: d06osipov 1.5.2008, 07:45
Приведи код который до #include <iostream> в X.CPP. Из-за него могут быть какие угодно ошибки во вклбючаемых файлах.

Автор: sol78 10.5.2008, 20:05
d06osipov, незнаю поможет ли
Код

#ifndef _RTOC
#define _RTOC

#define MAXSIZE 100

#include "Registration.h"
#include <iostream>
и так далее....

Автор: vinter 10.5.2008, 20:38
#include <iostream.h>

Автор: sol78 10.5.2008, 21:33
vinter, не пологло колличество ошибок увеличелось до 57 smile 

Автор: bronislav 10.5.2008, 22:46
А весь код выложить слабо?

Только атачем пожалуйста.

Автор: Ln78 11.5.2008, 13:32
sol78
сейчас в один из файлов в проекте для VS6 включил 
Код

#include <iostream>
#include <string>

using namespace std; 

без всяких дополнительных расширений, для верности дописав в одной из функций 
Код

    string s = "TTT";

оттранслировалось без единого замечания. Вероятно, причина в чём-то другом, возможно, в
#include "Registration.h"

Автор: bronislav 11.5.2008, 18:15
Цитата(Ln78 @  11.5.2008,  13:32 Найти цитируемый пост)
оттранслировалось без единого замечания. Вероятно, причина в чём-то другом, возможно, в
#include "Registration.h"


Ну тогда выложи этот файл. В нем могут быть ошибки или не правильно настроенные зависимости в MS VC6

Автор: sol78 11.5.2008, 21:19
ок выкладываю все, т.к. потеряла всякую надежду(((

Автор: Fazil6 11.5.2008, 21:38
Цитата(vinter @  30.4.2008,  17:25 Найти цитируемый пост)
правда в 6 вижуале не поддерживается стандарт и нет namespace'ов

чивоооо???
код я не скачивал и не смотрел но есть подозрение, что это 
Код

#include <iostream>
#include <string>
using namespace std;

написано в хедере, что является источником вот таких ошибок. По коду всегда должно быть так, что после using namespace не должно быть никаких инклудов так как он будет и на код этих инклудов влиять. Вообще что за мода юзать using namespace ? Неужели так сложно набрать std::  ?

Автор: vinter 11.5.2008, 23:44
Цитата(Fazil6 @  11.5.2008,  22:38 Найти цитируемый пост)
чивоооо???


Цитата
правда в 6 вижуале не поддерживается стандарт и нет namespace'ов

smile может с каким нибудь SP это и поправили, но это есть факт. Стандарт был принят в 99 году, а вижуал 98 года выпуска.

Автор: Earnest 12.5.2008, 09:06
Стандарт действительно поддерживается не полностью, но namespace точно есть.

Автор: sol78 12.5.2008, 09:42
прошу вас по делу, господа, почему код не компилится?

Автор: vinter 12.5.2008, 09:54
извиняюсь что неточно выразился, ничего в std неймспейс не обернуто, т.е при подключениии iostream не надо using делать.

Автор: Lazin 12.5.2008, 09:59
Цитата(Fazil6 @  11.5.2008,  21:38 Найти цитируемый пост)
код я не скачивал и не смотрел но есть подозрение, что это 

Код

#include <iostream>
#include <string>
using namespace std;


написано в хедере, что является источником вот таких ошибок. По коду всегда должно быть так, что после using namespace не должно быть никаких инклудов так как он будет и на код этих инклудов влиять. Вообще что за мода юзать using namespace ? Неужели так сложно набрать std::  ?

код скачал - так и есть, написано это в хэдэре,
весь код смотреть не стал, так как там куча каких-то диких макросов, нечитабельно, по крайней мере за разумное время smile 

Автор: Fazil6 12.5.2008, 10:15
1. Убрать из хедера using . Ошибка не от этого, но по любому это очень плохо и дальше вылезет.
2. Вообще-то имена, которые начинаются с подчеркивания по стандарту очень сильно нерекомендуются. А еслри это еще к тому же макрос
Код

#define _X

то пеняй на себя. Короче в X.h определен такой макрос и поэтому имеешь, то что имеешь

Автор: Ln78 12.5.2008, 13:20
sol78, во вложении несколько подкорректированный код, который компилируется под 6-ю студию.

Автор: just_geek 12.5.2008, 13:33
Цитата

может с каким нибудь SP это и поправили, но это есть факт. Стандарт был принят в 99 году, а вижуал 98 года выпуска.

Не исправляли, стандарт более менее вменяемо стал поддерживатся только в 7.1, Стандарт был принят в 98 году, и визуал вышел в 98 году, только на полгода раньше чем стандарт.

Автор: sol78 14.5.2008, 21:55
Ln78,  он не компелируется!!!!!!!!!
Помогите!!!!!!!!!!!!!!!!! smile

Добавлено через 5 минут и 2 секунды
Все теже 4 ошибки:
Compiling...
X.CPP
d:\microsoft visual studio\vc98\include\iosfwd(145) : error C2143: syntax error : missing ';' before '='
d:\microsoft visual studio\vc98\include\iosfwd(147) : error C2059: syntax error : '=='
d:\microsoft visual studio\vc98\include\iosfwd(149) : error C2059: syntax error : '<'
d:\microsoft visual studio\vc98\include\iosfwd(169) : error C2059: syntax error : '=='
Error executing cl.exe.

Автор: Ln78 15.5.2008, 05:58
Цитата(sol78 @  14.5.2008,  21:55 Найти цитируемый пост)
Ln78,  он не компелируется!!!!!!!!!
Помогите!!!!!!!!!!!!!!!!! 

Как не компилируется? У меня всё скомпилировалось: я и перед тем, как поместить сюда проверил, сейчас скачал именно этот архив ещё раз и проверил, всё без ошибок и замечаний. Проверял на 6-й студии, т.е. использовал RTOC.dsw и RTOC.dsp. Вы "Rebuild All" делать пробовали? Указанные ошибки были когда в X.h было:
Код

#ifndef _X
#define _X

После замены на 
Код

#ifndef _CLASS_X
#define _CLASS_X

у меня ошибки пропали. Попробуйте вместо _CLASS_X написать что-нибудь подлиннее и уникальнее

Автор: dizzy1984 15.5.2008, 07:18
Вот код из замечательного файла iosfwd
Код

template<> struct  char_traits<wchar_t> {
        typedef wchar_t _E;
        typedef _E char_type;   
        typedef wint_t int_type;
        typedef streampos pos_type;
        typedef streamoff off_type;
        typedef mbstate_t state_type;
        static void __cdecl assign(_E& _X, const _E& _Y)
                {_X = _Y; }
        //...
        };

Он включается в rtoc.h посредством строки
Код

#include <string>

В свою очередь, rtoc.h, не будучи глупым хидером, включается в x.h, включенный в начале файла x.cpp
Код

#include "X.h"

Интересный момент заключается здесь в препроцессорной директиве, расположенной в начале файла x.h. Это
Код

#ifndef _X
#define _X

Теперь переведем свой взор на код в начале этого поста. Что же будет с этим кодом если он попадет под действие макроса #define _X? Давайте проверим. Компилируем файл x.cpp с включенной директивой /P (генерация исходного текста после препроцессора). Посмотрите только как упростилась наша шаблонная специализация!
Код

template<> struct  char_traits<wchar_t> {
        typedef wchar_t _E;
        typedef _E char_type;   
        typedef wint_t int_type;
        typedef streampos pos_type;
        typedef streamoff off_type;
        typedef mbstate_t state_type;
        static void __cdecl assign(_E& , const _E& _Y)
                { = _Y; }
        //...

Теперь можно осмыслить сказанное компилятором предложение
Цитата

c:\program files\microsoft visual studio\vc98\include\iosfwd(145) : error C2143: syntax error : missing ';' before '='

Хотя раньше, показанное на неизуродованном теле iosfwd, оно могло вызывать лишь удивление.
Мораль заключается в том, что короткие имена макросов в плане разрушительности можно сравнить с ОМП и пользоваться ими, пожалуй, не стоит вовсе.
Немного еще по теме...
Посты vinter,а меня озадачили
Цитата(vinter @  30.4.2008,  20:21 Найти цитируемый пост)
меняй компилятор 

код C++    
1:    
#include <iostream.h>    

как там обозвали string я не знаю

и
Цитата(vinter @  12.5.2008,  01:44 Найти цитируемый пост)
может с каким нибудь SP это и поправили, но это есть факт. Стандарт был принят в 99 году, а вижуал 98 года выпуска.

На сколько я знаяю, существует 2 стандарта c++ - 98 и 2003 годов. А 98 студия была доделана в 97-году, но по коммерческим причинам поступила в продажи в 98-м. Так что стандарту она не соответствует, но довольно близка к нему и несомненно там есть и iostream и string и чего только нет. Подозреваю, что ей пользуются до сих пор и довольно успешно...
Цитата(vinter @  12.5.2008,  11:54 Найти цитируемый пост)
извиняюсь что неточно выразился, ничего в std неймспейс не обернуто, т.е при подключениии iostream не надо using делать.

Снова AFAIK в случе отсутствия объявления какого-то namespace, using namespace <имя> просто не даст никакого эффекта, т.е будет безвредна.
Ну и теперь призы. Первый приз выигрывает Fazil6, он даже без кода угадал проблему.
Второй приз идет Ln78, он исправил текст.
Цитата(sol78 @  14.5.2008,  23:55 Найти цитируемый пост)
Ln78,  он не компелируется!!!!!!!!!

Дай угадаю - ты компилируешь свой неисправленный вариант?
Кстати, 
Цитата(Fazil6 @  12.5.2008,  12:15 Найти цитируемый пост)
 Вообще-то имена, которые начинаются с подчеркивания по стандарту очень сильно нерекомендуются

у меня вопрос. Под именами что подразумевается?

Так, ну я бы еще пописал, но чуствую что наверно хватит.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)