Toon posts:

[c++] Probleem met map en eigen klasse

Pagina: 1
Acties:

Verwijderd

Topicstarter
Mijn eerste post hier :) Ik kon mijn probleem niet vinden met de search.

Ik probeer een map (stl) aan te maken met als sleutelwaarde een eigen klasse. Hieronder staat het probleem in het kort.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <map>

class a 
{
public:
private:
   int iBlaat;

};

bool operator < (a &aA, a &aB)
{
   return true;
}

void main()
{
   std::map<a, int> nM;
}


De foutmelding die ik krijg is als volgt:
C:\Program Files\DevStudio\VC\INCLUDE\functional(81) : error C2678: binary '<' : no operator defined which takes a left-hand operand of type 'const class a' (or there is no acceptable conversion)
Overload ik de < operator verkeerd of gebruik ik de map verkeerd?

  • Daggie
  • Registratie: Juni 2002
  • Laatst online: 13-08-2025
edit : foutje

[ Voor 86% gewijzigd door Daggie op 11-01-2003 23:39 ]


Verwijderd

Bovenaan (tussen include en class) 'class a;' zetten?

negeer maar, heb fout gekeken naar de }'s :|

[ Voor 44% gewijzigd door Verwijderd op 11-01-2003 23:59 ]


Verwijderd

Topicstarter
Verwijderd schreef op 11 januari 2003 @ 23:52:
Bovenaan (tussen include en class) 'class a;' zetten?
code:
1
2
3
4
5
6
7
8
#include <map>

class a;

class a 
{
public:
private:


Dit maakt geen verschil.

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
bool operator < (const a &aA, const a &aB)

lijkt me?

Verwijderd

Verwijderd schreef op 11 januari 2003 @ 23:56:
[...]

...

Dit maakt geen verschil.
Ja, ik dacht dat je IN je class een map wou aanmaken met elementen van het type van je huidige class... had miskeken.

PS1: heb hem ff uitgevoerd, 0 error(s), 0 warning(s), met MS VC6

PS2: ik veronderstel dat je nM[een_integer_getal] = een_object_type_a wilt, dan moet je: std::map<int, a> nM; volgens mij

[ Voor 4% gewijzigd door Verwijderd op 12-01-2003 00:10 ]


Verwijderd

marcusk schreef op 12 januari 2003 @ 00:09:
bool operator < (const a &aA, const a &aB)

lijkt me?
Ook, maar hij geeft nergens aan dat die functie moet gebruikt worden. (hij is immers geen member van class a). Dat moet je dus nog aangeven in de derde parameter van map<...>

Verwijderd

Topicstarter
marcusk schreef op 12 January 2003 @ 00:09:
bool operator < (const a &aA, const a &aB)

lijkt me?
had ik al geprobeerd en maakt helaas geen verschil. Misschien dat ik ergens een project settings verkeerd heb staan oid.

Verwijderd

Topicstarter
Verwijderd schreef op 12 January 2003 @ 00:09:
[...]
Ja, ik dacht dat je IN je class een map wou aanmaken met elementen van het type van je huidige class... had miskeken.

PS1: heb hem ff uitgevoerd, 0 error(s), 0 warning(s), met MS VC6

PS2: ik veronderstel dat je nM[een_integer_getal] = een_object_type_a wilt, dan moet je: std::map<int, a> nM; volgens mij
Vreemd dat hij het bij jou wel doet :) Ik zal nog even goed in de projectopties kijken.

Ik wil wel een eigen klasse plaatsen. Dit is een vereenvoudigd voorbeeld waarbij dezelfde foutmelding gegenereerd wordt. In het echt heb ik een iets ingewikkeldere klasse.

Verwijderd

Topicstarter
Verwijderd schreef op 12 januari 2003 @ 00:11:
[...]


Ook, maar hij geeft nergens aan dat die functie moet gebruikt worden. (hij is immers geen member van class a). Dat moet je dus nog aangeven in de derde parameter van map<...>
Ik heb al geprobeerd een friend functie te maken van de a klasse met de < operator. Hetzelfde resultaat.

Verwijderd

Topicstarter
* bloos *

Owkee hij werkt. Ik heb die const keywords toegevoegd en ik heb nog een hoop schijnbewegingen gemaakt.

Hartstikke bedankt iig :)

Verwijderd

STL is een tijdje geleden, maar waarom niet volgende operator overloading functie in de public sectie van class a:
code:
1
2
3
4
5
6
7
bool operator < (const a &a)
{
   if (iBlaat <= a.iBlaat)
      return true; /* EDIT ME! */
   else
      return false;
}

Verwijderd

Topicstarter
Verwijderd schreef op 12 January 2003 @ 00:24:
STL is een tijdje geleden, maar waarom niet volgende operator overloading functie in de public sectie van class a:
code:
1
2
3
4
5
6
7
bool operator < (const a &a)
{
   if (iBlaat <= a.iBlaat)
      return true; /* EDIT ME! */
   else
      return false;
}
Dan geeft hij weer dezelfde melding. Dan maar iets minder netjes.
Pagina: 1