为什么GCC在匹配函数时会查看私有构造函数?

时间:2009-02-05 09:01:26

标签: c++ gcc

我现在非常忙于调试一些代码,所以我不能做一个完整的例子,但这基本上描述了我的问题

class Base{};
class MyX:public Base
{
  ...
};
class Derived:Base
{
  ...
};
template<class X>
class MyClass:Derived
{
private:
   MyClass(const MyClass& )
     :x()
   {}
public:
   MyClass(const X& value)
    :x(value)
   {}
};

....
MyX      x;
MyClass<MyX>(x);

这给我一个错误:

error: there are two possible constrcutors MyClass<X>(const MyClass<X>&) and MyClass<X>(const X&)

2 个答案:

答案 0 :(得分:6)

MyClass<MyX>(x);

被解析为

MyClass<MyX> x;

MyClass<MyX>没有默认构造函数。试着给它一个名字:

MyClass<MyX> p(x);

答案 1 :(得分:0)

我担心你必须给我们一个更完整的代码示例。例如,在构造函数MyClass(const X&amp;)中,用“x”初始化“x”?

MyClass(const& X value)
  :x(x)