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

11

04.06.2016, 20:42

Weil in der cpp Datei der Funktion die Klassenzugehörigkeit fehlt!
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

12

04.06.2016, 20:47

Bei einer friend Funktion geht das doch nicht, oder?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

13

04.06.2016, 20:53

Schaut mir eigentlich OK aus. Sicher dass die Klassendefinition mit der friend Declaration an der Stelle, wo dein operator << definiert wird, auch bekannt ist!?

14

04.06.2016, 20:54

Funktioniert bei mir bestens:
https://ideone.com/i63uJk

15

04.06.2016, 20:54

Ah Sorry hast du recht!
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

16

04.06.2016, 20:57

In CVektorDbl.h ist zum Beispiel

C-/C++-Quelltext

1
int size() const;

definiert und kann auch in CVektorDbl.cpp so verwendet werden

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
int CVektorDbl::size() const
{
    int size = 0;

    for (int i = 0; i < this->dim; i++)
    {
        size += this->pKomp[i] * this->pKomp[i];
    }

    size = sqrt(size);

    return size;
}

Also ist doch die Klasse in der cpp Datei bekannt, sonst würde die size Methode so nicht funktionieren.

Wenn ich in der CVektorDbl.cpp die operator>> Methode auskommentiere, wird die Funktionsdefintion davon in der Header Datei grün unterringelt, da sie nicht implementiert ist. Entferne ich die Kommentar Markierungen in der .cpp Datei um die Methode, wird auch in der Header Datei angezeigt, dass die Methode implementiert wurde. Also ist die Defintion von CVektorDbl Klasse in der CVektorDbl.cpp bekannt.

@Techel
Dein Code lässt sich in VS 2015 nicht ausführen.
In Zeile 17 und Zeile 21 fehlen die Rückgabewerte.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »MitgliedXYZ« (04.06.2016, 21:06)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

17

04.06.2016, 21:44

Also bei mir kompiliert dein Code eigentlich. Was mich etwas stutzig macht ist, wieso du kein std:: vor iostream etc. brauchst. Verwendest du using namespace in Headern?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

18

04.06.2016, 21:49

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
int CVektorDbl::size() const
{
    int size = 0;

    for (int i = 0; i < this->dim; i++)
    {
        size += this->pKomp[i] * this->pKomp[i];
    }

    size = sqrt(size);

    return size;
}

Der Rückgabetyp und der Typ der temporären Variable sollten double sein. Außerdem sollte die Methode besser nicht size heißen, sondern length oder magnitude.

19

04.06.2016, 22:04

size_t sollte zudem bei Indices int vorgezogen werden und den Speicher hinter pKomp verwaltest du hoffentlich nicht mit new und delete. ;)
Überlege dir nochmal, ob du nicht doch templates verwenden willst.

CentuCore

Frischling

Beiträge: 43

Wohnort: Wien

  • Private Nachricht senden

20

05.06.2016, 00:16

Kann es sein, dass "using namespace std;" den Compiler durcheinander bringt und du explizit den namespace bei der Definition deines Operators angeben musst?
Ich hatte so ein Problem mal bei VS13.

Werbeanzeige