Ошибка при поиске функции

Я пытаюсь обойти ограничение, заключающееся в том, что ctor по умолчанию для пользовательского мета-типа Qt должен быть публичным, объявляя определенные функции друзьями.

#include <QMetaType>

class QVariant;
template<typename T> inline T qvariant_cast(const QVariant &); // from qvariant.h

namespace foo
{
class Bar
{
private:
Bar(){};
friend void *::qMetaTypeConstructHelper<Bar>(const Bar *t); // works
friend inline Bar ::qvariant_cast<Bar>(const ::QVariant &v); // error C4430: missing type specifier
};
} // namespace foo

Q_DECLARE_METATYPE(foo::Bar)

void main()
{
QVariant v;
v.value<foo::Bar>();
}

При комментировании отмеченной строки я получаю следующую ошибку:

1>[...]\qvariant.h(577): error C2248: 'foo::Bar::Bar' : cannot access private member declared in class 'foo::Bar'

Но объявление функции как друга не работает:

Bar.cpp(13): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

Похоже, что MSVC 2010 не видит промежутка между «Бар» и «::».

Кроме того, как сделать общедоступный ctor общедоступным, как я могу получить его для компиляции?

0

Решение

Похоже, что MSVC 2010 не видит промежутка между «Бар» и «::».

Пространства не имеют значения вокруг :: имея в виду foo::bar такой же как foo ::bar,

Попробуйте добавить круглые скобки вокруг имени функции:

friend inline Bar (::qvariant_cast<Bar>)(const ::QVariant &v);
4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector