Поместите себя в положение компилятора: то, когда Вы вперед объявляете тип, весь компилятор знает, - то, что этот тип существует; это ничего не знает о своем размере, участниках или методах. Поэтому это звонило неполный тип . Поэтому Вы не можете использовать тип для объявления участника или базового класса, так как компилятор должен был бы знать расположение типа.
Принятие следующего предописания.
class X;
Вот то, что Вы можете и не можете сделать.
, Что можно сделать с неполным типом:
Объявляют, что участник указатель или ссылка на неполный тип:
class Foo {
X *p;
X &r;
};
Объявляют функции или методы, которые принимают/возвращают неполные типы:
void f1(X);
X f2();
Определяют функции или методы, которые принимают/возвращают указатели/ссылки на неполный тип (но не используя его участников):
void f3(X*, X&) {}
X& f4() {}
X* f5() {}
, Что Вы не можете сделать с неполным типом:
Использование это как Использование базового класса
class Foo : X {} // compiler error!
это для объявления участника:
class Foo {
X m; // compiler error!
};
Определяют функции или методы с помощью этого Использования типа
void f1(X x) {} // compiler error!
X f2() {} // compiler error!
его методы или поля, на самом деле пытаясь разыменовать переменную с неполным типом
class Foo {
X *m;
void method()
{
m->someMethod(); // compiler error!
int i = m->someField; // compiler error!
}
};
Когда дело доходит до шаблонов, нет никакого абсолютного правила: можно ли использовать неполный тип, поскольку шаблонный параметр зависит от пути, тип используется в шаблоне.
, Например, std::vector
требует, чтобы его параметр был полным типом, в то время как boost::container::vector
не делает. Иногда, полный тип требуется, только если Вы используете определенные функции членства; дело обстоит так для [1 110] , например.
А хорошо зарегистрированный шаблон должен указать в его документации на все требования своих параметров, включая то, должны ли они быть полными типами или нет.
После этого довольно устаревшего руководства: , Как Скопировать Вашу Музыку iPod на Linux, я использовал gtkpod 2.1.1
в Ubuntu 12.04
для экспорта всех музыкальных файлов от iPod до резервной папки.
я имел к:
device
в Thunar (использующий его левую панель) gtkpod
, затем выбирает iPod, тогда right-click
в эти Playlist Tracks
, область, тогда Select All
Tools > Export Tracks > To Filesystem
или right-click > Copy > To Filesystem
Export Destination Directory
, совершают нападки Save
, можно проверить, подходили ли все путем рассмотрения number
из файлов в целевом dir и size
из файлов, содержавшихся, как отображено в эти Thunar status bar
и перепроверки этого с [1 114] в [1 115]. У меня было несоответствие 11 объектов (1599 на iPod по сравнению с 1588 в резервном dir), но, о, хорошо, возможно, были некоторые дубликаты, лежащие вокруг.
См. также: