Nie wiem o co może chodzić

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 :


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

using namespace std;

void wyjdz();

void wyjdz()
{

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

}
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.

2
// nazwapliku.h
#pragma once

void wyjdz();
// nazwapliku.cpp

#include "nazwapliku.h"

#include <iostream>

using namespace std;

void wyjdz()
{
  cout << " Czy aby napewno chcesz wyjsc?" << endl;
}
0

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

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.

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

// 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:

#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:

#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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0