2012-04-26 2 views
0

Я создал простой класс перейти к методу сортировки массива элементов Джюс http://www.rawmaterialsoftware.com/api/classArray.html#ac1dca4ab2895315dd85e25eaca2fcab1неявной конструкция с конструктором по умолчанию в C++

Это выглядит следующим образом:

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

Когда я создаю экземпляр этого перейти к компаратора, эти две работы:

XComparison x; 
XComparison x = XComparison(); 

, но это один дает мне ошибку компилятора:

XComparison x(); 

"слева» .compareElements' должен иметь класс/структуры/объединения" на линии 74, 101, 119 из http://juce.git.sourceforge.net/git/gitweb.cgi?p=juce/juce;a=blob;f=modules/juce_core/containers/juce_ElementComparator.h;h=f976c40c7741b3df30d10e699c282a3569a49e3c;hb=HEAD#l74

Почему не неявную работу присваивания здесь?

Спасибо!

+2

Это 99999 дубликата людей, работающих в этой веселости. – Puppy

ответ

4

XComparison х(); анализируется как объявление функции x, которое не принимает аргументов и возвращает XComparison.

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

+0

О, конечно, конечно. Большое спасибо. – Trevor

1

Вы объявляете функцию не выражением, поэтому вы получаете ошибку.

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++ faq

Смежные вопросы