为啥 GCC 在匹配函数时会查看私有构造函数?
Posted
技术标签:
【中文标题】为啥 GCC 在匹配函数时会查看私有构造函数?【英文标题】: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? 不是直接的,但正如我的更新显示他们确实共享一个祖先 【参考方案1】:MyClass<MyX>(x);
被解析为
MyClass<MyX> x;
但是MyClass<MyX>
没有默认构造函数。试着给它起个名字:
MyClass<MyX> p(x);
【讨论】:
【参考方案2】:恐怕您将不得不给我们一个更完整的代码示例。例如,在构造函数 MyClass(const X&) 中,您是用“x”初始化“x”吗?
MyClass(const& X value)
:x(x)
【讨论】:
这是一个错字,应该是价值以上是关于为啥 GCC 在匹配函数时会查看私有构造函数?的主要内容,如果未能解决你的问题,请参考以下文章