2014-11-18 4 views
0

Привет всем У меня есть класс Fooкомпилятор ошибка C2248: 'QObject :: QObject': не может получить доступ к закрытому члену, объявленный в классе '' QObject

кодекса foo.h

namespace GUI 
{ 
class Foo : public QObject 
{ 
Q_OBJECT 

public: 
explicit Foo(QObject *parent = 0); 
virtual ~Foo(); 
.... 


}; 
} 

Теперь это работать и компиляция хорошо, но я хочу сохранить эти пользовательские C++ с использованием QSettings класса и один из шага регистрации вашего класса с Q_DECLARE_METATYPE

и поэтому, как только я поставил эту линию Q_DECLARE_METATYPE(Foo) на end of my foo.h file Я получаю эту ошибку компилятора C2248: «QObject :: Qobject»: не может получить доступ к частному члену, объявленному в классе «QObject», и который при щелчке только переносит меня в последнюю строку моего заголовочного файла connection.h и дает никакой другой информации относительно того, что может быть неправильно я, е ошибки не указывать мне

Class Foo 
    { 

    };<---- point me here 
    Q_DECLARE_METATYPE(Foo) 

Я знаю, что QObject не может быть скопирована, и это связано с ним, но я понятия не имею, что может быть неправильно здесь и как я могу исправить. Заранее спасибо

ответ

0

Убедитесь, что Q_DECLARE_METATYPE утверждение вне вашего пространства имен, и что вы полностью квалифицировать имя класса. Дополнительную информацию см. В документе Q_DECLARE_METATYPE.

namespace GUI 
{ 

class Connection : public QObject 
{ 
    ... 
}; 

} 

Q_DECLARE_METATYPE(GUI::Connection) 
+0

я уже пробовал, он дает ту же ошибку, – bourne

2

Я знаю, что QObject не может быть скопирована, и это связано с ним, но я понятия не имею, что может быть неправильно здесь и как я могу исправить.

Это является. Q_DECLARE_METATYPE требует, чтобы ваш тип был гибким, но ваш тип наследуется от QObject, поэтому вы не можете этого сделать. Конечно, вы могли бы вместо Q_DECLARE_METATYPE(Foo*), но я думаю, вы должны переместить настройки в отдельный класс значений, который затем можно сохранить с помощью QSettings.

+0

спасибо большое, что так работал, кстати, что вы предлагаете, что я должен сделать новую-структуру всех переменных-членов, что мне нужно, чтобы сохранить с помощью QSettings и чем иметь переменную-член этой структуры в моем классе соединения. И что структура не будет унаследована от QObject – bourne

+0

Да, точно. Затем вы можете создать некоторые функции для сохранения/восстановления экземпляра этой структуры из настроек. – peppe

0

Я знаю, что QObject не может быть скопирована, и это связано с ним, но я не имеют ни малейшего представления, что может быть неправильно здесь и как я могу исправить.

Так объявите конструктор копии, тогда все будет в порядке.

... 
Foo(const Foo &_other); 
...