Форум: "Прочее";
Текущий архив: 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:\õîááè\c++\mylaba#9 (3 chasti)\h.h(4) : error C2871: "std" : does not exist or is not a namespace
opred.cpp
e:\õîááè\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