Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

kiba

Alter Hase

  • »kiba« ist der Autor dieses Themas

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

1

22.09.2008, 16:24

[Erledigt]klasse als parameter in dll classen

hi hab ein problem mit einer funktion die in einer klasse
wenn ich da jetzt in der funktion ein anderen klassen typ als parameter angeben streickt der compieler

Quellcode

1
2
3
4
5
6
7
//basis_include.h
//windows und andren std includes
#ifdef TEST_EXPORTS
    #define DLL __declspec(dllexport)
#else
    #define DLL __declspec(dllimport)
#endif

Quellcode

1
2
3
4
//all_include.h
#include "basis_include.h"
#include "ClassA.h"
#include "ClassB.h"

Quellcode

1
2
3
4
5
6
7
//ClassA.h
#include "all_include.h"
class DLL ClassA{
    public:
    int x;
    int y;
};

Quellcode

1
2
3
4
5
6
//ClassB.h
#include "all_include.h"
class DLL ClassB{
    public:
    void funktion(ClassA &a);  //<-- hier is der fehler
};

Quellcode

1
2
#include "all_include.h"
//winmain DLL

fehlermeldung:
error C2061: Syntaxfehler: Bezeichner 'ClassA'
error C2511: 'void funktion(ClassA&)': Überladene Memberfunktion nicht in 'ClassB' gefunden
Siehe Deklaration von 'ClassB'

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

22.09.2008, 16:29

Wieso inkludierst du all_include in jedem Header? Damit inkludierst du ja die Header in sich selbst! :shock:
@D13_Dreinig

3

22.09.2008, 16:34

zumindest ohne Include-Guards - so z.B. besser:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
//all_include.h

#ifndef DLL
#include "basis_include.h"
#endif
#ifndef ClassA
#include "ClassA.h"
#endif
#ifndef ClassB
#include "ClassB.h"
#endif

ist vllt nicht so furchtbar guter Stil, aber am besten, um zu sichern, das mans wirklich bei allen Dateien verwendet und nirgendwo vergisst ;)

kiba

Alter Hase

  • »kiba« ist der Autor dieses Themas

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

4

22.09.2008, 16:47

sry, es klappt nicht
und i habs auch mal mit...
(und die anderen auch so gemacht)

Quellcode

1
2
3
4
5
6
7
8
9
10
11
#ifndef __CLASSA_H
#define __CLASSA_H 

#include "all_include.h"
class DLL ClassA{
    public:
    int x;
    int y;
}; 

#endif

...versucht und das klappt auch nicht

5

22.09.2008, 16:57

mal ne ganz blöde Frage (davon ausgehend, das du das ganze mit anderen, richtigen Klassen machst), du bist sicher, das du die in der richtigen Reihenfolge einbindest, also die Klasse, die als Parameter verwendet wird (im Beispiel ClassA) vor der, von der sie verwendet wird (im Beispiel ClassB)?
Falls es zu viele Querverbindungen gibt: man kann von Klassen genauso Prototypen erstellen wie von Funktionen ;)

6

22.09.2008, 19:54

btw wenn ich mich recht erinnere waren Makros, die mit _ beginnen, dem Compiler vorbehalten...

7

22.09.2008, 20:49

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
#if !defined (FOO_HPP__INCLUDED)
#define FOO_HPP__INCLUDED

#pragma once

namespace mydll
{
    struct foo
    {};
};

#endif // FOO_HPP__INCLUDED


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
#if !defined (BAR_HPP__INCLUDED)
#define BAR_HPP__INCLUDED

#pragma once

namespace mydll
{
    class bar
    { foo m_foo; };
};

#endif // BAR_HPP__INCLUDED


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
#if !defined(MYDLL_HPP__INCLUDED)
#define MYDLL_HPP__INCLUDED

#pragma once

#include "Foo.hpp"
#include "Bar.hpp"

#endif // MYDLL_HPP__INCLUDED
... fertig!
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

8

22.09.2008, 22:14

Zitat von »"Steef"«

btw wenn ich mich recht erinnere waren Makros, die mit _ beginnen, dem Compiler vorbehalten...
Offiziell nur solche, die entweder mit mehreren Unterstrichen oder mit Unterstrich und Grossbuchstaben beginnen.

T-VIRUS

Alter Hase

Beiträge: 548

Wohnort: Göttingen(West)/Nordhausen(Ost)

Beruf: Schüler

  • Private Nachricht senden

9

23.09.2008, 10:02

Hallo,
ich habe eine Frage zu Pragma once.
Ist es sauberer ifndef zu nutzen, was ich die meiste Zeit tue oderwäre die Pragma once Anwendung sauberer?

MFG T-Virus
Meine Blog:)

Wer Bugs im Text findet kann sie melden, fix erscheint irgendwann :D

MFG T-VIRUS

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

10

23.09.2008, 10:31

Was spricht gegen beides?
@D13_Dreinig

Werbeanzeige