wazer | 2021-02-17 10:25:21 UTC | #1
co można zrobić lepiej?
czemu nie działa przestrzeń nazw, którą chciałem użyć w obliczenia.h>
dlaczego program najpierw pyta o liczba 2, a nie odwrotnie
opcja:1
Podaj liczbe: 2:5.4
Podaj liczbe: 1:2.5
main.cpp:
//c++ 20 #include <iostream> #include "obliczenia.h" using namespace std; int main() { //constexpr string szMessage {"Podaj liczbe:"}; //constexpr char szMessage[] = {"Podaj liczbe:"}; const string szMessage{"Podaj liczbe:"}; while (true) { switch (iGetInteger("1.prostokat0.wyjdz\nopcja:")) { case 1: switch (iGetInteger("1.obwod \n2.pole \nopcja:")) { case 1: cout << (dblObwodProstokat(dblGetDouble(szMessage + " 1:"), dblGetDouble(szMessage + " 2:"))) << endl; break; case 2: cout << (dblPoleProstokat(dblGetDouble(szMessage + " 1:"), dblGetDouble(szMessage + " 2:"))) << endl; break; default: cout << "nie znaleziono takiej opcji"; break; } break; case 0: return 0; break; default: cout << "nie znaleziono takiej opcji"; break; } } }
obliczenia.cpp:
#includeusing namespace std; int iGetInteger(const string &szMessage) { int iNumber; cout << szMessage; cin >> iNumber; return iNumber; } double dblGetDouble(const string &szMessage) { double dblNumber; cout << szMessage; cin >> dblNumber; return dblNumber; } double dblObwodProstokat(double dblNumber1, double dblNumber2 = 898766.0) { if(dblNumber2==898766.0)dblNumber2=dblNumber1; if (dblNumber1 > 0.0 && dblNumber2 > 0.0) { return 2 * dblNumber1 + 2 * dblNumber2; } return 0; } double dblPoleProstokat(double dblNumber1, double dblNumber2) { if (dblNumber1 > 0 && dblNumber2 > 0) { return dblNumber1 * dblNumber2; } return 0; }
obliczenia.h:
#include
using namespace std;ifndef UNTITLEDOBLICZENIAH
define UNTITLEDOBLICZENIAH
//namespace obliczenia {
int iGetInteger(const string &szMessage);double dblGetDouble(const string &szMessage);
double dblObwodProstokat(double dblNumber1, double dblNumber2 = 898766.0);
double dblPoleProstokat(double dblNumber1, double dblNumber2);
//}endif //UNTITLEDOBLICZENIAH
wazer | 2020-11-09 19:56:58 UTC | #3
link do pobrania
projekt.7z
KrEdEnS | 2020-11-09 19:59:14 UTC | #4
@wazer Jeżeli możesz wrzuć w temat pliki:
wazer | 2020-11-09 20:05:38 UTC | #5
nie da się
pisało że nie mogę
mloskot | 2020-11-12 11:04:28 UTC | #6
Ponieważ w obliczenia.cpp
nie definiujesz niczego w przestrzeni obliczenia
.
‘Opakuj’ wszystkie definicje w namespace obliczenia {
oraz }
podobnie jak to zrobiłeś w nagłówku obliczenia.h
.
Dodatkowo, w plikach nagłówkowych unikaj using namespace std
importujące definicje z std
do globalnej przestrzeni.
wazer | 2020-11-11 16:35:27 UTC | #7
[quote=”wazer, post:1, topic:16669”]
rw pyta o liczba 2, a nie odwrotnie
[/quote]
Umieściłem definicje w przestrzeni nazw obliczenia, tak jak pisałeś i działa :slight_smile:
mam jeszcze trzy dodatkowe pytanie
Dlaczego w linii 9 main.cpp zmienna szMessage nie może być constexpr?
Usunąłem using namespace std z pliku nagłówkowego obliczenia.h i dodałem do stringów std::, wszystko działa :+1:
Spróbowałem usunąć dyrektywe #include
Dlaczego po usunięciu dyrektywy include z pliku nagłówkowego wszystkie deklaracje funkcji z argumentami string działają bez problemu?
Dlaczego jak usunę #include
Spodziewałem się że plik main.cpp nie będzie miał wpływu na obliczenia.h i nie będzie działał tylko plik main.cpp
mloskot | 2020-11-12 11:04:28 UTC | #8
[quote=”wazer, post:7, topic:16669, full:true”]
Dlaczego w linii 9 main.cpp zmienna szMessage nie może być constexpr?
[/quote]
Może być, zobacz tu https://godbolt.org/z/P99eaq
Może używasz kompilatora bez wsparcia C++11 lub kompilujesz bez odpowiedniej opcji (e.g. -std=c++11
).
[quote=”wazer, post:7, topic:16669, full:true”]
Spróbowałem usunąć dyrektywe #include
Dlaczego po usunięciu dyrektywy include z pliku nagłówkowego wszystkie deklaracje funkcji z argumentami string działają bez problemu?
Dlaczego jak usunę #include
[/quote]
Ponieważ w main.cpp
masz #include <iostream>
przed swoim nagłówkiem:
#include <iostream>
#include "obliczenia.h"
a <iostream>
sam dołącza <string>
.
system | 2021-02-17 10:31:44 UTC | #9
Ten temat został automatycznie zamknięty 32 dni po ostatnim wpisie. Tworzenie nowych odpowiedzi nie jest już możliwe.