【发布时间】:2011-12-23 16:34:12
【问题描述】:
编辑:我发布了整个班级(删除了一些与错误无关的内容)
我做了以下课程:
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;
};
【问题讨论】:
-
你确定这是你的全部代码吗?
-
我确定这不是整个代码。我的猜测是他将
0或NULL传递给构造函数,例如packet(0)或packet(NULL)。 -
我很确定这家伙的可选参数比实际代码中的要多。
-
你说
packet(0)? -
@Luchian:显然不可能,因为
packet()不能含糊。
标签: c++ visual-studio-2010 inheritance operators