Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];

Вниз

Что за прикол в С++???   Найти похожие ветки 

 
SkySpeed   (2006-12-03 22:34) [0]

Использую раздельную компиляцию, состоящую из трёх файлов:

H.H:

#ifndef _coord_
#define _coord_

class coord
{
private:
double x,y;
public:
coord(int x1=0,int b1=0);
void show() const;
coord operator*(int a);
coord operator/(int a);
};

#endif


opred.cpp:

#include "H.H"
#include <iostream.h>

coord::coord(int x1,int y1)
{
x=x1;
y=y1;
};

void coord::show() const
{
cout<<"x: "<<x<<" y: "<<y<<"\n";
}

coord coord::operator*(int a)
{
coord temp;
temp.x=x*a;
temp.y=y*a;
return temp;
}

coord coord::operator/(int a)
{
coord temp;
temp.x=x/a;
temp.y=y/a;
return temp;
}


Main.cpp:

#include "H.H"
#include <iostream>

using namespace std;

int main()
{
coord o1(10,7);
cout<<"Ishodnie dannie:\n";
o1.show();
o1=o1*3;
cout<<"Koordinati umnogeni na chislo 3:\n";
o1.show();

cout<<"Ishodnie dannie:\n";
o1.show();
o1=o1/4;
cout<<"Koordinati razdeleni na chislo 4:\n";
o1.show();
return 0;
}


В результате выводит следующее:

Ishodnie dannie:
Koordinati umnogeni na chislo 3:
Ishodnie dannie:
Koordinati razdeleni na chislo 4:
x: 10 y: 7
x: 30 y: 21
x: 30 y: 21
x: 7.5 y: 5.25
Press any key to continue


Правильней было бы (но так не выводит):

Ishodnie dannie:
x: 10 y: 7
Koordinati umnogeni na chislo 3:
x: 30 y: 21
Ishodnie dannie:
x: 30 y: 21
Koordinati razdeleni na chislo 4:
x: 7.5 y: 5.25
Press any key to continue


Из-за чего это так происходит??? Что изменить чтобы вывод происходил нормальным образом???


 
Celades ©   (2006-12-03 22:37) [1]

Скорей всего проблема в буфферезированном выводе.
Лучше пиши вконце строк вместо "\n" endl


 
SkySpeed   (2006-12-03 22:42) [2]


> Celades ©   (03.12.06 22:37) [1]
> Скорей всего проблема в буфферезированном выводе.
> Лучше пиши вконце строк вместо "\n" endl

Спасибо! Теперь всё в порядке!


 
palva ©   (2006-12-03 22:50) [3]

А почему у вас в одном файле
#include <iostream.h>
а в другом
#include <iostream>
По идее это означает, что вы используете разные объекты cout (относящиеся к разным namespace).


 
SkySpeed   (2006-12-03 22:57) [4]


> palva ©   (03.12.06 22:50) [3]
> А почему у вас в одном файле
> #include <iostream.h>
> а в другом
> #include <iostream>
> По идее это означает, что вы используете разные объекты
> cout (относящиеся к разным namespace).

Если в Main.cpp поставить #include <iostream.h>, то при компиляции будет ошибка:

e:\c++\mylaba#9 (3 chasti)\main.cpp(4) : error C2871: "std" : does not exist or is not a namespace

Если в opred.cpp поставить #include <iostream>, то при компиляции будет три ошибки:


E:\C++\MyLaba#9 (3 chasti)\opred.cpp(12) : error C2065: "cout" : undeclared identifier
E:\C++\MyLaba#9 (3 chasti)\opred.cpp(12) : error C2297: "<<" : illegal, right operand has type "char [4]"
E:\C++\MyLaba#9 (3 chasti)\opred.cpp(12) : error C2065: "endl" : undeclared identifier


Вот и пойми этот компилятор %)


 
Celades ©   (2006-12-03 22:58) [5]

using namespace std;


 
palva ©   (2006-12-03 23:06) [6]

> error C2871: "std" : does not exist or is not a namespace
Ну так убрать
using namespace std;
Ясен пень, в iostream.h namespace std не используется? Значит получаем неизвестное namespace.

> error C2065: "cout" : undeclared identifier
А здесь ошибка исчезнет, если вы напишете
using namespace std;
или хотя бы будете писать cout с префиксом std::cout. Ведь в этом случае все потоковые классы описаны внутри namespace std.


 
SkySpeed   (2006-12-03 23:08) [7]


> Celades ©   (03.12.06 22:58) [5]
> using namespace std;

При добавлении данной строки в H.H:
e:\c++\mylaba#9 (3 chasti)\opred.cpp(4) : error C2871: "std" : does not exist or is not a namespace

При добавлении данной строки в  или в opred.cpp:
Main.cpp
e:\&#245;&#238;&#225;&#225;&#232;\c++\mylaba#9 (3 chasti)\h.h(4) : error C2871: "std" : does not exist or is not a namespace
opred.cpp
e:\&#245;&#238;&#225;&#225;&#232;\c++\mylaba#9 (3 chasti)\h.h(4) : error C2871: "std" : does not exist or is not a namespace


Что насчёт этого скажешь? :)


 
palva ©   (2006-12-03 23:19) [8]

Что насчёт этого скажешь? :)
> За меня уже сказал компилятор. В тот момент, когда он прочитал строку
using namespace std;
namespace с именем std еще не определено.
Эта строка будет правильно воспринята только после того, как компилятор проглотит файл iostream или любой другой, где это namespace определено.
То есть нужно ставить после строки #include <iostream>


 
Celades ©   (2006-12-03 23:29) [9]

SkySpeed
Такие базовые вещи написаны в любой книге по С++. Неужели трудно почитать, да и мозги развивает. Это гораздо быстрее чем по каждому чиху писать в форум.


 
palva ©   (2006-12-03 23:35) [10]

Если надо обязательно вставлять в файл H.H, тогда напишите перед using строку
namespace std {}
Проверить сейчас не могу, но должно работать. Но такой стиль программирования - дурной тон.


 
Tirael ©   (2006-12-04 07:35) [11]

или инклюдай H.H после. файлы собираются в порядке перечисления



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.04 c
2-1165171129
atas-sheriff
2006-12-03 21:38
2006.12.24
Поиск


2-1165493327
SMAC
2006-12-07 15:08
2006.12.24
Прозрачность (2)


15-1165139896
ml
2006-12-03 12:58
2006.12.24
"TUnRar без Dll" - моя первая статья


2-1165376580
Desk
2006-12-06 06:43
2006.12.24
Подскажите алгоритм доски?


15-1165221574
Stanislav
2006-12-04 11:39
2006.12.24
Чем занимается организация? ваше мнение





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский