Странная ошибка конструктора в VC2015
От: Barbar1an Украина  
Дата: 20.03.17 12:14
Оценка:
не могу воспроизвести на простом примере но в проекте почемуто происходит

    class CXaiTextReader : public IXaiReader
    {
    };


    class CXaiDocument
    {
        public:
            CXaiDocument(){}
            CXaiDocument(IXaiReader & dr){}
    };

    CXaiDocument d(CXaiTextReader(s));
    d.Get<CString>(L"Title");  // error C2228: left of '.Get' must have class/struct/union

    auto d = CXaiDocument(CXaiTextReader(s));
    d.Get<CString>(L"Title");  // OK
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Отредактировано 20.03.2017 12:15 Barbar1an . Предыдущая версия .
Re: Объявление функции
От: Qbit86 Кипр
Дата: 20.03.17 12:24
Оценка: +1
Здравствуйте, Barbar1an, Вы писали:

B>
CXaiDocument d(CXaiTextReader(s)); // Возможно, это объявление функции.
std::cout << typeid(d).name() << std::endl; // ?
Глаза у меня добрые, но рубашка — смирительная!
Отредактировано 20.03.2017 12:25 Qbit86 . Предыдущая версия .
Re: Странная ошибка конструктора в VC2015
От: watchmaker  
Дата: 20.03.17 12:27
Оценка: +2
Здравствуйте, Barbar1an, Вы писали:

B>не могу воспроизвести на простом примере но в проекте почемуто происходит

Да просто объявление функции получилось.
Добавь скобок
CXaiDocument d((CXaiTextReader(s)));
или используй uniform initialization
CXaiDocument d{CXaiTextReader(s)};
Re[2]: Объявление функции
От: Barbar1an Украина  
Дата: 20.03.17 12:29
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>Здравствуйте, Barbar1an, Вы писали:


B>>
CXaiDocument d(CXaiTextReader(s)); // Возможно, это объявление функции.
Q>std::cout << typeid(d).name() << std::endl; // ?




class mw::CXaiDocument __cdecl(class mw::CXaiTextReader)
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[3]: Объявление функции
От: Qbit86 Кипр
Дата: 20.03.17 12:33
Оценка:
Здравствуйте, Barbar1an, Вы писали:

Q>>
std::cout << typeid(d).name() << std::endl; // ?

B>class mw::CXaiDocument __cdecl(class mw::CXaiTextReader)

Ну, то есть то же, что и:
CXaiDocument d(CXaiTextReader s); // s — формальный параметр.
Глаза у меня добрые, но рубашка — смирительная!
Re[2]: Странная ошибка конструктора в VC2015
От: Barbar1an Украина  
Дата: 20.03.17 12:33
Оценка:
Здравствуйте, watchmaker, Вы писали:

W>Здравствуйте, Barbar1an, Вы писали:


B>>не могу воспроизвести на простом примере но в проекте почемуто происходит

W>Да просто объявление функции получилось.
W>Добавь скобок
CXaiDocument d((CXaiTextReader(s)));
или используй uniform initialization
CXaiDocument d{CXaiTextReader(s)};


а с какого хрена такое объявление стало объявлением функции?
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[3]: Странная ошибка конструктора в VC2015
От: watchmaker  
Дата: 20.03.17 12:48
Оценка: 1 (1)
Здравствуйте, Barbar1an, Вы писали:
B>а с какого хрена такое объявление стало объявлением функции?
Ну оно не стало, а всегда таким было. Так язык устроен. Подробнее: Most vexing parse.
Re: Странная ошибка конструктора в VC2015
От: Erop Россия  
Дата: 21.03.17 03:07
Оценка:
Здравствуйте, Barbar1an, Вы писали:
B>
B>            CXaiDocument(IXaiReader & dr){}
B>    auto d = CXaiDocument(CXaiTextReader(s));
B>


То, что ссылка не константная, никому не мешает?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: Странная ошибка конструктора в VC2015
От: _NN_ www.nemerleweb.com
Дата: 21.03.17 09:10
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, Barbar1an, Вы писали:

B>>
B>>            CXaiDocument(IXaiReader & dr){}
B>>    auto d = CXaiDocument(CXaiTextReader(s));
B>>


E>То, что ссылка не константная, никому не мешает?


Если выключить расширения Microsoft то будет мешать конечно: https://msdn.microsoft.com/en-us/library/186yxbac.aspx
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.