繁体   English   中英

在C ++中使用默认构造函数进行隐式构造

[英]Implicit construction with default constructor in C++

我创建了一个简单的类,以传递给Juce Array的排序方法http://www.rawmaterialsoftware.com/api/classArray.html#ac1dca4ab2895315dd85e25eaca2fcab1

看起来像这样:

class XComparison
{
public:
    static int compareElements (StraightPath first, StraightPath second)
    {
        return (int) (first.xOrigin - second.xOrigin);
    }
};

当我创建此实例传递给比较器时,这两项工作:

XComparison x;
XComparison x = XComparison();

但这给了我一个编译器错误:

XComparison x();

http://juce.git.sourceforge.net/git/gitweb.cgi?p=juce/juce;a=blob的第74、101、119行上的“'.compareElements'的左侧必须具有class / struct / union” ; F =模块/ juce_core /容器/ juce_ElementComparator.h; H = f976c40c7741b3df30d10e699c282a3569a49e3c; HB = HEAD#174

为什么隐式赋值在这里不起作用?

谢谢!

XComparison x(); 被解析为x的函数声明,该函数声明不带任何参数并返回XComparison。

http://yosefk.com/c++fqa/ctors.html#fqa-10.19

您声明的是函数而不是表达式,这就是为什么您会收到错误消息。

XComparison x; // default construction, unitialised
XComparison x = XComparison(); // construct x from default constructor
XComparison x(); // all you are doing is declaring a function x that returns XComparison

看到此C ++常见问题解答

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM