amiga-news DEUTSCHE VERSION
.
Links| Forums| Comments| Report news
.
Chat| Polls| Newsticker| Archive
.

amiga-news.de Forum > Programmierung > StormC 3.0 und Überladen von Operatoren [ - Search - New posts - Register - Login - ]

-1- [ - Post reply - ]

2003-11-19, 21:00 h

Mad_Dog
Posts: 1944
User
Kann es sein, daß StormC 3.0 (im C++ Modus) Probleme mit dem Überladen von Operatoren hat?

Habe mir eine Vektor-Klasse (für 3D-Vektoren) gebastelt und hierzu die Operatoren "+" und "=" überladen, daß man z.B. auch zwei Vektoren v1 und v2 einfach mit v3 = v1 + v2 addieren kann. Leider meldet mir der Compiler, daß ein Typkonflikt vorliegt. In diesem fall scheint er nicht zu merken, daß ich die Operatoren "+" und "=" überladen habe...

--

http://www.norman-interactive.com

[ - Answer - Quote - Direct link - ]

2003-11-19, 21:36 h

mrbbc
Posts: 101
User
etwas genauer wär' nett... will dir ja nicht unterstellen, dass du's mit class ... {
void +();
void =();
}

probiert hast ;o)

Was ist denn überhaupt die Basisklasse ?

Wahrscheinlich stimmt einfach der Rückgabewert nicht überein (void statt int...); und da man den Rückgabewert einer Funktion beim Aufruf nicht zwangsläufig erkennt, ist es in C++ nicht erlaubt, gleichnamige Funktionen an zu legen, die sich nur in den Rückgabewerten unterscheiden.

[ - Answer - Quote - Direct link - ]

2003-11-19, 22:03 h

Mad_Dog
Posts: 1944
User
Hier mal einige Codeschnipsel:

code:
typedef float scalar_t; // scalar

class Vector3D
{

  public:

    scalar_t x;   // x,y,z components
    scalar_t y;
    scalar_t z;

  public:

    // Constructors
    Vector3D(scalar_t a = 0, scalar_t b = 0, scalar_t c = 0)
    {
      x = a; y = b; z = c;
    }

    Vector3D(const Vector3D &vec)
    {
      x = vec.x; y = vec.y; z=vec.z;
    }


usw.

Hier das Überladen der Operatoren "+" , "+=" und "=":

code:
const Vector3D &operator=(const Vector3D &vec)
    {
      x = vec.x;
      y = vec.y;
      z = vec.z;

      return *this;
    }

    const Vector3D operator + (const Vector3D &vec) const
    {
      return Vector3D(x + vec.x, y + vec.y, z + vec.z);
    }

    const Vector3D operator + () const
    {
      return Vector3D(*this);
    }

    const Vector3D operator += (const Vector3D& vec)
    {
      x += vec.x;
      y += vec.y;
      z += vec.z;

      return *this;
    }


Das ganze mach ich dann noch für diverse andere Vektoroperationen wie z.B. Skalarprodukt usw. .

Und hier das Testprogramm:

code:
#include <iostream.h>
#include "Vector_Class.cpp"

int main()
{
  Vector3D v1(1.0,2.0,3.0);
  Vector3D v2(2.0,3.0,4.0);
  Vector3D v3(0.0,0.0,0.0);
  
  v3 = v1 + v2;

  cout << v3.x << endl << v3.y << endl << v3.z << endl;

  cout << "Ok." << endl;

  return 0;
}

--

http://www.norman-interactive.com

[ - Answer - Quote - Direct link - ]

2003-11-20, 11:16 h

Solar
Posts: 3680
User
Schneller Test ergibt: g++ (v3.2) compiliert obigen Code (unverändert) mit --pedantic -Wall ohne Fehler oder Warnungen.

[ - Answer - Quote - Direct link - ]

2003-11-20, 13:58 h

Mad_Dog
Posts: 1944
User
Zitat:
Original von Solar:
Schneller Test ergibt: g++ (v3.2) compiliert obigen Code (unverändert) mit --pedantic -Wall ohne Fehler oder Warnungen.


Danke!

Das bestätigt leider meine Befürchtung: Es liegt an StormC 3.0, der nicht merkt, daß ich die Operatoren überladen habe :( .

Wäre noch die Frage offen, ob's mit StormC 4.0 besser geht.

Meine gcc-Installation habe ich leider beim Updateversuch verhunzt :( wo wir wieder bei einem beliebten Thema wären...


--

http://www.norman-interactive.com

[ - Answer - Quote - Direct link - ]

2003-11-20, 14:31 h

Solar
Posts: 3680
User
Zitat:
Original von Mad_Dog:
Wäre noch die Frage offen, ob's mit StormC 4.0 besser geht.


Der Compiler-Core von StormC 4 ist meines Wissens nach gcc > 2.95. Damit sollte es gehen, nur habe ich ihn nicht zur Hand um das zu testen. Sorry.

[ - Answer - Quote - Direct link - ]

2003-11-20, 23:52 h

Holger
Posts: 8116
User
Vielleicht kommt StormC weniger durcheinander, wenn Du die Operatoren Referenzen zurückgeben läßt?
Kann's nicht testen, habe StormC nicht mehr.

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Answer - Quote - Direct link - ]

2003-11-21, 08:43 h

Mad_Dog
Posts: 1944
User
Hab jetzt mein gcc wieder zum Laufen bekommen, indem ich ne ältere Version (2.95.x) drüber installiert hab. Damit gab's dann keine Probleme mehr.

Fazit: StormC 3.0 ist zwar für C zu gebrauchen, aber nicht für C++.

Was auffällt: Die Executables werden mit gcc (bzw. g++) deutlich größer wie bei StormC.

--

http://www.norman-interactive.com

[ - Answer - Quote - Direct link - ]

2003-11-22, 02:10 h

Dietmar
Posts: 166
User
Zitat:
Was auffällt: Die Executables werden mit gcc (bzw. g++) deutlich größer wie bei StormC.

Hast Du die Option zum Entfernen von Symbolen, Kommentaren usw. benutzt? Bei GoldED Studio AIX geht das mit "StripSymbols" auf der Dialog-Seite "Linker". Damit wird das Programm viel kleiner. Keine Ahnung wie die Option in der Kommandozeile heisst. Alternativ kann man das auch nach dem Übersetzen machen:

---

Unstripped exes can get quite big, esp if you link with massive linklibs like libstdc++ (which also has alot of debuginfo in it), therefore you should always do the following:

strip --strip-unneeded --remove-section .comment myexe -o myexe_stripped

This will make a copy of myexe named myexe_stripped, but with all compiler and debuginfo removed, making it significantly smaller .. you could also just leave out "-o myexe_stripped" in which case it will remove it from myexe directly, however you shouldn't do that, as it will make it impossible to debug later...

[ - Answer - Quote - Direct link - ]


-1- [ - Post reply - ]


amiga-news.de Forum > Programmierung > StormC 3.0 und Überladen von Operatoren [ - Search - New posts - Register - Login - ]


.
Masthead | Privacy policy | Netiquette | Advertising | Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved.
.