【问题标题】:Why does GCC look at private constructors when matching functions?为什么 GCC 在匹配函数时会查看私有构造函数?
【发布时间】:2009-02-05 09:01:26
【问题描述】:

我现在正忙着写调试一些代码,所以我无法编写一个完整的示例,但这基本上描述了我的问题

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&)

【问题讨论】:

  • MyX 是否派生自 MyClass?
  • 不是直接的,但正如我的更新显示他们确实共享一个祖先

标签: c++ gcc


【解决方案1】:
MyClass<MyX>(x);

被解析为

MyClass<MyX> x;

但是MyClass&lt;MyX&gt; 没有默认构造函数。试着给它起个名字:

MyClass<MyX> p(x);

【讨论】:

    【解决方案2】:

    恐怕您将不得不给我们一个更完整的代码示例。例如,在构造函数 MyClass(const X&) 中,您是用“x”初始化“x”吗?

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

    【讨论】:

    • 这是一个错字,应该是价值
    猜你喜欢
    • 2019-10-16
    • 1970-01-01
    • 2015-09-21
    • 2011-02-04
    • 1970-01-01
    相关资源
    最近更新 更多