Metody z własnym typem - błąd przy kompilacji

0

Witam. Piszę pewien problem jednak mam problem. W projekcie stworzyłem plik include.h który zawiera wszystkie inne pliki. Dołączam go do każdego pliku. Problem w tym że w pewnej klasie używam metody zwracającej mój własny typ zapisany w innym pliku.
Plik z metodą -> include.h -> Plik z typem
Podczas tworzenia kodu wykrywa ten typ i nie pokazuje błędów jednak podczas kompilacji pojawia się:

Error	8	error C4430: missing type specifier - int assumed. Note: C++ does not support default-int	c:\users\andrzej\documents\visual studio 2012\projects\program\file.h	14	1	program

Gdy dodam definicję tego typu do pliku z metodą wszystko jest ok. Jak mogę to rozwiązać problem bez zmieniania lokalizacji definicji typu?

0

Deklaracje typów/klas/struktur masz w pliku nagłówkowym (ze strażnikiem nagłówka oczywiście). I potem w plikach źródłowych po prostu dołączasz potrzebne nagłówki.
W plikach naglówkowych możesz stosować deklaracje zapowiadające np.
//plik Seba.h

class Mati;
class Seba{
    Mati* mati;
};

//plik Mati.h

class Seba;
class Mati{
    Seba* seba;
};
0

Mam coś takiego w pliku 1.h:

#pragma once
typedef void* (*type)(int a, bool *b);

W pliku includes.h:

#pragma once
#include "1.h"

W pliku 2.h:

#pragma once
#include "includes.h
class abc
{
public:
	type function();
}

I problem w tym że ide widzi ten typ podczas pisania a podczas kompilacji już nie, zredefiniowanie typu w 2.h powoduje że kompiluje się prawidłowo. Ja nie chcę zmieniać pozycji definicji.

0

winno być:

 type function;

bez nawiasów.

0

@kaczus
Ale to jest metoda, na dodatek przyjmująca 2 argumenty

0

czyli function ma zwracać ci metodę o takich parametrach?

Zaczynam podejżewać, że nie wiesz po co jest ten typedef....

0

Tak ma zwracać, w takim razie jak mam to napisać? Gdy dodam typedefa do pliku 2.h kompiluje się i program działa tak jak należy.

0

Pokaż faktyczny kod, bo ten przykładowy wygląda ok (poza niedomkniętym includem i brakiem średnika po definicji klasy)

0

@kq
Właściwy kod raczej nic nie da :/ Wydaje mi się że wszystko powinno działać ale niestety
Include.h:

#pragma once

#include <Windows.h>
#include <iostream>
// Plus kilkanaście innych include


#include "Opengl.h" // Tutaj znajduje się typedef
#include "Drawing.h" // Tutaj wykorzystuję ten typ
// Oraz inne pliki

using namespace std;

Opengl.h:

#pragma once

#include "Include.h"

typedef void* (*Interface)(int Number, bool Overlay, const char *InterfaceName, int *hReturnCode);

class Opengl
{
public:
	Opengl();
	~Opengl();

	// Dużo funkcji i zmiennych
	// Tutaj funkcje wykorzystujące typ działają

};

extern Opengl* GL;

I plik Drawing.h:

#pragma once

#include "Include.h"

class Drawing
{
public:
	Drawing();
	~Drawing();

	// Dużo funkcji i zmiennych
	// Tu już typ nie jest widziany ale tylko podczas kompilacji

	Interface DrawInterface(char* InterfaceName); 

};

extern Drawing* Draw;
0

Pdpowiem Ci troche - robiąc bezmyślne owijki na biblioteki w C marnujesz czas na tworzenie czegoś, co do tego wszystkiego jest błędne - const correctness, wycieki pamięci i wielokrotne jej zwalnianie.

0

@spartanPAGE
Usunięcie tego includowania pomogło, teraz będzie mi się trudniej ogarnąć w tych includach ale jakoś sobie poradzę. Dzięki za naprowadzenie :)

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