Редактировать: я опубликовал весь класс (несколько полос для ошибки, не относящейся к делу)
Я создал следующий класс:
class packet
{public:char * buffer;
int size;
int data;
packet();
packet(packet &text, int length=-1);
packet(char * text, int length=-1);
packet(int val);
packet(char c);
packet(double d);
packet(float f);
~packet();
packet & operator= (packet &text);
packet operator+ (packet &text);
packet & operator+= (packet &text);
packet & operator|= (packet &text);
bool operator== (packet &text);
bool operator*= (packet &text);
bool operator!= (packet &text);
operator char* () const;
operator int () const;
operator float () const;
char operator [] (int pos) const;
};
И я использую класс следующим образом:
packet p = packet();
или
return packet();
И Visual Studio выдает мне эту ошибку:
test.cpp(162): error C2668: 'packet::packet' : ambiguous call to overloaded function
...packet.h(26): could be 'packet::packet(float)'
...packet.h(23): or 'packet::packet(int)'
...packet.h(22): or 'packet::packet(char *,int)'
Кто-нибудь знает, что я здесь не так делаю?Почему это неоднозначно?
PS: я думаю, что это связано с 4 операторами внизу, но я немного запутался с перегрузкой таких операторов ...
Решение: я заработал, отметив некоторые конструкторы как явные:
class packet
{public:char * buffer;
int size;
int data;
packet();
packet(packet &text, int length=-1);
explicit packet(char * text, int length=-1);
explicit packet(int val);
explicit packet(char c);
explicit packet(double d);
explicit packet(float f);
~packet();
packet & operator= (packet &text);
packet operator+ (packet &text);
packet & operator+= (packet &text);
packet & operator|= (packet &text);
bool operator== (packet &text);
bool operator*= (packet &text);
bool operator!= (packet &text);
operator char* () const;
operator int () const;
operator float () const;
char operator [] (int pos) const;
};