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

1

19.01.2009, 13:17

declaration of `operator[]' as non-function

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
class Matrix
{
public:
...
    inline float* operator[] (WORD iLine){
        return &_11+iLine*4;
    }
...
};

Quellcode

1
2
declaration of `operator[]' as non-function
expected `;' before '(' token


Den Code hab ich von wem, der VC benutzt und dort scheint er offenbar zu kompilieren. Unter MinGW geht es allerdings nicht.
Lieber dumm fragen, als dumm bleiben!

kiba

Alter Hase

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

2

19.01.2009, 13:27

sollte der operator nicht den Klassen typ oder ein bool zurückliefern

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

19.01.2009, 13:28

Zitat von »"kiba"«

sollte der operator nicht den Klassen typ oder ein bool zurückliefern

Quatsch, wieso das denn?
Der kann zurückliefern, was er will (inklusive void).

4

19.01.2009, 13:29

Es muss an deinem Compiler liegen, folgendes wird vom g++ in Version 4.1.2 uebersetzt:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
class Matrix
{
    public:
    float _11;
    inline float* operator[] (int iLine){
        return &_11+iLine*4;
    }
};

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

5

19.01.2009, 13:30

Zitat von »"kiba"«

sollte der operator nicht den Klassen typ oder ein bool zurückliefern


Hä? Der Code ist korrekt, muss an MinGW liegen. Vielleicht ist WORD nicht bekannt?

Edit:
vieel zu spät! :)

6

19.01.2009, 13:42

Hm, ja, wenn ich WORD durch unsigned int ersetze, geht es.
Schade, dass er so ne komische Fehlermeldung macht.
Lieber dumm fragen, als dumm bleiben!

Firefly

Alter Hase

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

7

20.01.2009, 09:33

soweit ich weiß ist der operator [] mit dem typ size_t deklariert was einem unsigend int entspricht. Deshalb wird ein WORD nicht akzeptiert...

8

20.01.2009, 09:46

Hm, soweit ich das verstanden habe, kann man doch Operatoren beliebig definieren, man müsste also auch einen [] machen können, der ein float oder ein string oder gar irgendein komplexes Objekt als Parameter hat.
Ich glaub es lag nicht daran, dass er kein WORD wollte, sondern, dass er kein WORD kannte.
Lieber dumm fragen, als dumm bleiben!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

20.01.2009, 09:52

Zitat von »"Jonathan_Klein"«

Hm, soweit ich das verstanden habe, kann man doch Operatoren beliebig definieren, man müsste also auch einen [] machen können, der ein float oder ein string oder gar irgendein komplexes Objekt als Parameter hat.


Korrekt, Beispiel siehe std::map ;)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

10

20.01.2009, 09:54

Zitat von »"Firefly"«

soweit ich weiß ist der operator [] mit dem typ size_t deklariert was einem unsigend int entspricht. Deshalb wird ein WORD nicht akzeptiert...


Nein, wieso denn? Alles was du machst ist eine Funktion zu überladen und das funktioniert mit jedem beliebigen Typ! Du kannst sogar mehrere Versionen anbieten:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
struct foo
{
    void operator[]( int x )
    {
        printf( "operator[]( int )\n" );
    }

    void operator[]( float x )
    {
        printf( "operator[]( float )\n" );
    }

    void operator[]( const std::string& x )
    {
        printf( "operator[]( string )\n" );
    }
};

int main()
{
    foo x;
    x[10];
    x[3.1415f];
    x["Hallo Welt"];
}

Werbeanzeige