Przekazanie struktury do funkcji w innym pliku źródłowym.

0

Chciałbym przekazać dane z struktury do funkcji w innym pliku źródłowym. Gdy funkcja i struktura są w jednym pliku robię to w ten sposób:

int Funkcja(struct Struktura * sktruktura) 
{
}
int main()
{
Funkcja(&Struktura);
}

Nie działa to jednak, gdyż funkcja w innym pliku nie może znaleźć struktury. Strukturę dałem do podrzędnego pliku(include oczywiście jest). Mógłbym zrobić to w sposób, że w parametrze podaje każdą daną osobno

(Funkcja(&sktruktura.x, &struktura.y itp)

, lecz to taka proteza wtedy jest.
Nie chodzi mi o danie gotowego na tacy, lecz nakierowanie lub opisanie w jaki sposób mam to zrobić.

2

Definicja struktury w headerze, includowanie headera zarówno w mainie jak i w innym pliku i kompilacja powinna przejść.

Pokaż całość kodu + jaki jest błąd bo szklana kula nie powie ;)

0

Zdefiniuj strukturę w nagłówku. Zainkluduj nagłówek w obu plikach .cpp.

0

Game.cpp
http://wklejto.pl/208942
W 139 linijce jest wywołanie funkcji z Drive.h
Game.h
http://wklejto.pl/208944
Drive.cpp
http://wklejto.pl/208951
Drive.h
http://wklejto.pl/208952
Struct.cpp
http://wklejto.pl/208948
Struct.h
http://wklejto.pl/208949

Wkleiłem tylko najważniejsze pliki.

0
  1. headery otocz sobie IFNDEF/DEFINE/ENDIF żeby nie było redeklaracji
  2. includuj struct przed game

popraw, dopisz jaki błąd.

0

A ja myślałem że dajesz do scruct wycinek kodu ;) no z takim błędem to oczywiste że nie pójdzie - musisz zdefiniować strukture w nagłówku w pełni.

klolejność includowania zmieniasz po prostu przestawiając linijki

0

Kod powinieneś pisać w taki sposób, aby kolejność inkludowania nie miała znaczenia - od tego masz wyżej opisane include guardy.

0

Plik Struct.cpp

#include "Struct.h"

typedef struct PlayerStat
{
    int KoordX;
    int KoordY;
    int PositionInStart;
    int Speed;
    int Angle;
} StatPlayer;

Plik Struct.h

#ifndef Struct.h
#define Struct.h
#include <iostream>
#include <SFML\Graphics.hpp>
#include <sstream>
#include <string>
#include <cstdlib>


typedef struct PlayerStat StatPlayer;

#endif

Chyba źle to zrobiłem, błąd nadal ten sam.

0

Definicja struktury musi być w nagłówku.

0

To co mówi @kq = masz nie mieć Struct.cpp w tym przypadku - nie ma sensu. Twój kod powinien wyglądać tak:

#ifndef STRUCT_H
#define STUCT_H

typedef struct PlayerStat
{
    int KoordX;
    int KoordY;
    int PositionInStart;
    int Speed;
    int Angle;
} PlayerStat;

#endif

Spójrz jeszcze na typedef: Dobrym zwyczajem w C jest dać

typedef struct Nazwa {} Nazwa;

wówczas do użycia nie będziesz musiał wywoływać

struct Nazwa foo;

tylko

Nazwa foo;
0

Serdeczne dzięki, nie zrozumiałem (i nie wiedziałem) co kryje się pod nazwą "zdefiniować w nagłówku".

1

No to musisz się nauczyć, bo to podstawowe pojęcia. W uproszczeniu:
deklaracja - mówisz, że coś istnieje
definicja - mówisz, że coś istnieje i jak wygląda

struct X; // deklaracja

// definicja:
struct X{
// ... 
};

To samo się tyczy funkcji i zmiennych, chociaż dla zmiennych syntax jest mniej jednoznaczny, a bardziej zależny od kontekstu.

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