Nie wiem o co może chodzić

Nie wiem o co może chodzić
Ten Frędzowaty
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 9
0

Witam! :)
Mam problem z kodem, a raczej z tym plikiem...
Inne pliki sa podobnie zbudowane itp. i jest okej.

jak cos to jest header (nazwapliku.h) a nie program (nazwapliku.cpp)

Chcę zrobić funkcję,** nie wazne jak ją nazwe zawsze jest ten błąd** za nic w świcie nie wiem co robić, wyskakuje mi error że funkcja "wyjdz" jest juz definiowana, jak chce się do niej odwołać?(nie wiem jak to określić chodzi o 10 linijke kodu) i pisze ze nie moge redefinować czy co, pierwszy raz się z takim czymś spotykam, a mianowicie tak wygląda kod calego pliku :

Kopiuj
#include <iostream>
#include <windows.h>
#include <string>


using namespace std;

void wyjdz();

void wyjdz()
{

  cout << " Czy aby napewno chcesz wyjsc?" << endl;

}
kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
2

https://dsp.krzaq.cc/post/352/co-oznacza-slowo-kluczowe-inline/

Albo zadeklaruj, że jest to funkcja inline, albo przenieś jej definicję do jednego pliku cpp.

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
2
Kopiuj
// nazwapliku.h
#pragma once

void wyjdz();
Kopiuj
// nazwapliku.cpp

#include "nazwapliku.h"

#include <iostream>
 
using namespace std;
 
void wyjdz()
{
  cout << " Czy aby napewno chcesz wyjsc?" << endl;
}
Ten Frędzowaty
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 9
0

Dzięki, i opisał byś mi co to te, tzn kiedy używać itp #pragma once?

PR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 316
0

Dba o to aby plik by linkowany raz podczas kompilacji. Z tego co wiem to używać zawsze gdy masz więcej niż jedne plik.

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
5
Ten Frędzowaty napisał(a):

Dzięki, i opisał byś mi co to te, tzn kiedy używać itp #pragma once?

Zawsze w nagłówku.

Alternatywą jest "header guard", czyli coś takiego

Kopiuj
// nazwa makra jest dowolna, ale powinna się jakoś wiązać z nazwą pliku dla uniknięcia kolizji
#ifndef __NAZWAPLIKU_H__
#define __NAZWAPLIKU_H__

/* tutaj cała zawartość nagłówka */

#endif

Zabezpiecza to przed dziwnymi błędami w takiej sytuacji:

Kopiuj
#include "nazwapliku.h"
#include "nazwapliku.h"

wydałoby się, że wystarczy pilnować by takiej sytuacji nie było, ale jest to trudniejsze niż by się wydawało:

Kopiuj
#include "nazwapliku.h"
#include "innanazwapliku.h"

jeśli w nagłówku innanazwapliku.h jest linijka #include "nazwapliku.h" to też mamy problem z dwukrotnym włączeniem tego samego nagłówka.
Dlatego używa się #pragma once albo header guarda dla zablokowania ponownego include'a.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.