Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.24;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.054 c
2-1165356717
dreamse
2006-12-06 01:11
2006.12.24
Вопросец по динамическому созданию контролов


4-1155972674
Handle
2006-08-19 11:31
2006.12.24
TSysListView32


11-1141978027
Andr-04
2006-03-10 11:07
2006.12.24
BMP в KOLOLERichEdit


3-1160572987
Rule
2006-10-11 17:23
2006.12.24
Подскажите пожалуйста где взять формальную граматику T-SQL(MSSQL)


15-1165079133
Chuvak
2006-12-02 20:05
2006.12.24
Посоветуйте книгу по алгоритмам структурам данных