Utilizator:
Parola:
Am uitat parola... | Cont nou!


Articole Resurse Echipe Competiții Proiecte Forum DevBlogs Locuri de muncă GDROMag Issue#1 GDROCon 2007

 
Forum » Programare » Altele » Mică problemă în c++




Pagina 1 din 1 [ 1 ]

Mesaj Info autor
    Postat la 12 Aug 2011 10:22:43    Subiect: Mică problemă în c++
hdalin info:

hdalin:

Deci ... am bucata următoare de cod:

Cod sursă:

template
class vector2d
{
    T x;
    T y;
public:
    vector2d()
    {
        x = 0;
        y = 0;
    }

    vector2d(T valueX,T valueY)
    {
        x = valueX;
        y = valueY;
    }
........
    vector2d& operator=(vector2d &other)
    {
        x = other.getX();
        y = other.getY();
        return *this;
    }
.......
};
typedef vector2d vector2dui;
 


Problema este că atunci când fac așa ceva:
Cod sursă:
resolution = vector2dui(1024,768);

primesc eroarea:

In constructor 'CGEngine::CGEngine()':
error: no match for 'operator=' in '((CGEngine*)this)->CGEngine::resolution = vector2d(1024u, 768u)'|
note: candidates are: vector2d& vector2d:: operator=(vector2d&) [with T = unsigned int]|
note: vector2d& vector2d:: operator=(T) [with T = unsigned int]|

Știu că pot rezolva problema dacă fac așa ceva:
Cod sursă:

vector2dui vec(1024,768);
resolution = vec;
 

dar tot sunt curios de ce nu merge prima variantă și ce ar trebui să modific Razz.
Îmi poate da cineva o mână de ajutor?

P.S.: Știe cineva cum pot să scriu semnele mai mare și mai mic, ca să pot pune codul sursă complet Very Happy

Ultima editare efectuată de hdalin pe 12 Aug 2011 10:25:53; 1 editări în total


Status:
Înregistrat pe:
26 Jun 2008 17:46:04
Vârsta: 19 ani
Mesaje: 33
Locatie:
Programator junior
Cobi Games
 
    Postat la 12 Aug 2011 10:43:36    Subiect: < fara subiect >
Black_Knight info:

Black_Knight:

probabil ai gresit ceva in suprascrierea operatorului =
incearca fara & in prototipul functiei

PS: ar fi frumos daca nekitu ar rezolva problema cu disparitia semnelor mai marei si mai mic ca nu prea intelegem ce scrie aici Sad

Ultima editare efectuată de Black_Knight pe 12 Aug 2011 11:12:13; 1 editări în total


Status:
Înregistrat pe:
07 May 2007 19:49:43
Vârsta: 29 ani
Mesaje: 712
Locatie: Bucuresti
Programator

 
    Postat la 12 Aug 2011 11:05:54    Subiect: < fara subiect >
hdalin info:

hdalin:

Problema e că n-am habar ce e greșit. Dacă inițializez vec, pot să îl copiez în resolution, însă dacă folosesc constructorul, compilatorul nu mai acceptă codul.

Mi-am adus aminte că și în Irrlicht parcă aveam problema asta. M-am uitat și peste sursa Irrlichtului și tot același lucru e făcut și acolo.

Nu e o problemă foarte mare. După cum am mai spus, pot să lucrez ușor în jurul ei. Totul e că sunt curios de ce nu merge Razz

P.S.: Același lucru se întâmplă și daca elimin &

Ultima editare efectuată de hdalin pe 12 Aug 2011 11:08:28; 1 editări în total


Status:
Înregistrat pe:
26 Jun 2008 17:46:04
Vârsta: 19 ani
Mesaje: 33
Locatie:
Programator junior
Cobi Games
 
    Postat la 12 Aug 2011 11:13:27    Subiect: < fara subiect >
Black_Knight info:

Black_Knight:

elimina & si din return...
din pacate mai mult nu te pot ajuta pentru ca
1 - sunt la munca si aici lucrez pe mac nu pe PC...
2 - codu e incomplet pentru ca forumu taie anumite caractere Sad

daca nu rezolvi pana diseara sau maine o sa ma uit de acasa.

PS: nu prea inteleg ce cauta typedefu ala pe acolo...

Ultima editare efectuată de Black_Knight pe 12 Aug 2011 11:14:19; 1 editări în total


Status:
Înregistrat pe:
07 May 2007 19:49:43
Vârsta: 29 ani
Mesaje: 712
Locatie: Bucuresti
Programator

 
    Postat la 12 Aug 2011 11:20:50    Subiect: < fara subiect >
meeshoo info:

meeshoo:

Care e declaratia lui "resolution" ala, ca am impresia ca are a face cu aia?

Cred ca prin typedef a redenumit vector2d "mai mic" unsigned int "mai mare" ca sa scrie mai usor, atata tot

Ultima editare efectuată de meeshoo pe 12 Aug 2011 11:21:22; 1 editări în total



Status:
Înregistrat pe:
15 May 2007 10:52:43
Vârsta: 29 ani
Mesaje: 390
Locatie: Cluj-Napoca
Programator
Jungle Troll Entertainment
 
    Postat la 12 Aug 2011 12:24:40    Subiect: < fara subiect >
hdalin info:

hdalin:

Am găsit problema ... în cele din urmă.

Foloseam Codeblocks și am zis să încerc și Visual C++, unde totul merge perfect.

P.S.: Codul de mai sus mergea pentru că se trecea pe copy constructor Laughing ... numai acum mi-am dat seama.


Status:
Înregistrat pe:
26 Jun 2008 17:46:04
Vârsta: 19 ani
Mesaje: 33
Locatie:
Programator junior
Cobi Games
 
    Postat la 19 Aug 2011 11:16:12    Subiect: < fara subiect >
Dark info:

Dark:

Referinta pasata la operator trebuie sa fie const, ca nu o schimbi. Si getterii aia trebuie sa fie tot const, in caz ca nu sint deja. In gcc nu mergea pentru ca nu ai voie sa pasezi obiecte temporare ca referinte non-const, ca nu ai ce modifica. In vc merge ca e mai permisiv cu asta, desi parca la 2010 iti da si el eroare. Oricum, schimba acolo, ca aia nu e c++ valid.

Ps: un vector cu getteri si setteri pentru x si y e cea mai mare prostie. Fa x si y aia publici.

Ultima editare efectuată de Dark pe 19 Aug 2011 12:40:49; 1 editări în total

"Am crezut ca esti ceva mai avansat" - Nekitu, 2008 A.D.
Autobaza


Status:
Înregistrat pe:
12 May 2007 20:12:30
Vârsta: ? ani
Mesaje: 740
Locatie:
Programator

 

Pagina 1 din 1 [ 1 ]


Server time: 08:24:13 22.05.2012



[ Termeni si conditii | Contact | F.A.Q. | Funny Pictures ]

© 2006 - 2012 Copyright 7thFACTOR Entertainment - All rights reserved