Witam, mam taki problem. Testowałem wywołanie funkcji o oto co zrobiłem:
Zawartość pliku test.cpp
#include
#include "function.h"
int main ()
{
void authorization ();
}
Zawartość pliku function.h
void authorization ()
{
string priority;
string password;
cout << "Type your priority:\t";
cin >> priority;
if (priority == "admin")
{
cout << "Type password for administrator priority:\t";
cin >> password;
if (password == "asemblore")
cout << "Hoooray, admin module works!";
else
cout << "Sorry, this is not administrator funcion password. Remember, impersonateing any of Salazaar Software employee is a criminal and may be wanting by police.";
}
if (priority == "moderator")
{
cout << "Type password for moderator priority:\t";
cin >> password;
if (password == "doistezous")
cout << "Hoooray, mod module works!";
else
cout << "Sorry, this is not moderator funcion password. Remember, impersonateing any of Salazaar Software employee is a criminal and may be wanting by police.";
}
if (priority == "employee")
{
cout << "Type password for employee priority:\t";
cin >> password;
if (password == "alitlawe")
cout << "Hoooray, empy module works!";
else
cout << "Sorry, this is not employee funcion password. Remember, impersonateing any of Salazaar Software employee is a criminal and may be wanting by police.";
}
if ( (priority != "admin") && (priority != "moderator") && (priority != "employee") )
cout << "There's no " << priority << " priority";
}
I wyskakuje mi mnóstwo błędów typu: 3 C:\Dev-Cpp1\function.h `string’ undeclared (first use this function) Co zrobiłem źle?
tutaj jest coś nie tak, jeśli funkcja jest int, to musi coś zwracać poprzez return na końcu z tego co ja rozumiem (aczkolwiek moja wiedza jest znikoma) więc albo void main, albo return 0
Aha no sorry, pomyliło mi się, include twojego pliku nagłówkowego jest dobrze, w cudzysłowie. Natomiast mimo wszystko nalegam, abyś usunął te spacje z funkcji, tak się nie pisze po prostu. No i podaj jakie to błędy wywala kompilator/linker?
Aaaa już wiem, przecież nie załączyłeś biblioteki do obsługi stringów! Hehe taki banał…
#include
powinno załatwić sprawę
W pliku function powinno znaleźć się include string oraz iostream.
Hej wrzuciłem ten kod do Anjuty, popoprawiałem i masz, zapomniałeś również o
using namespace std;
#include
#include "function.h"
int main ()
{
authorization ();
}
function.h
#ifndef FUNCTION_H
#define FUNCTION_H
#include
#include
using namespace std;
void authorization ()
{
string priority;
string password;
cout << "Type your priority:\t";
cin >> priority;
if (priority == "admin")
{
cout << "Type password for administrator priority:\t";
cin >> password;
if (password == "asemblore")
cout << "Hoooray, admin module works!";
else
cout << "Sorry, this is not administrator funcion password. Remember, impersonateing any of Salazaar Software employee is a criminal and may be wanting by police.";
}
if (priority == "moderator")
{
cout << "Type password for moderator priority:\t";
cin >> password;
if (password == "doistezous")
cout << "Hoooray, mod module works!";
else
cout << "Sorry, this is not moderator funcion password. Remember, impersonateing any of Salazaar Software employee is a criminal and may be wanting by police.";
}
if (priority == "employee")
{
cout << "Type password for employee priority:\t";
cin >> password;
if (password == "alitlawe")
cout << "Hoooray, empy module works!";
else
cout << "Sorry, this is not employee funcion password. Remember, impersonateing any of Salazaar Software employee is a criminal and may be wanting by police.";
}
if ( (priority != "admin") && (priority != "moderator") && (priority != "employee") )
cout << "There's no " << priority << " priority";
}
#endif
polecam również metodę definiowania nazwy takiej jak nazwa pliku co zapobiega dwukrotnemu włączeniu jakiegoś pliku nagłówkowego, taki dobry nawyk
Jeśli wywołujesz funkcję - nie pisz zwracanego typu.
int main ()
{
authorization ();
return 0;
}
Poza tym zależnie od środowiska deklaracja użycia przestrzeni nazw std nie musi być wymagana (jest domyślna). Zwracam też uwagę na następujące kwestie:
dlaczego umieszczasz kod w pliku nagłówkowym?
dlaczego z jednej strony wykorzystujesz obiekty (cin, cout) a z drugiej piszesz strukturalnie?
dlaczego umieszczasz hasła w samym pliku?
Dwa ostatnie w sumie mocno filozoficzne, pierwsze wskazuje na to, że nie masz pojęcia o faktoryzacji kodu i pisaniu modułów.
Jeszcze drobiazg:
jak zadajesz pytanie: pisz jakiego środowiska używasz,
Nie wymagają. Gdyby wymagały to program nie kompilowałby się. Punktów startowych zdefiniowanych jest kilka, jeden z nich ma pustą (void) listę parametrów. Uważasz, że deklarowanie main() z parametrami jest dobrą praktyką? Nieużywane parametry też nie są najlepszym pomysłem.
Włącz raportowanie błędów na poziomie W4 to się przekonamy, czy to jest konieczne. Programowanie nie polega na zrobieniu czegoś, co działa, tylko na pisaniu solidnego kodu.
Umieściłeś tam implementację funkcji a nie jej prototyp i na to ci zwróciłem uwagę. Nie wiesz w związku z tym na czym polega podział na moduły.
Przechować hash i wpisaną wartość hashować; porównywać hashe.
To zależy od implementacji, generalnie jednak większość środowisk definiuje kilka różnych prototypów funkcji startowej (main, _main, wmain, _wmain; każda z kilkoma wariantami różniącymi się parametrami).