Разница заключается в том, что один объявляет массив структур, а другой объявляет массив указателей к структурам - но это не ваша проблема.
Вот простой пример, который иллюстрирует эту проблему у вас возникли:
struct foo {
foo(int n) {
// nothing
}
};
foo obj;
и вот сообщения об ошибках, которые я получаю от г ++:
c.cpp:7:5: error: no matching function for call to ‘foo::foo()’
c.cpp:7:5: note: candidates are:
c.cpp:2:5: note: foo::foo(int)
c.cpp:2:5: note: candidate expects 1 argument, 0 provided
c.cpp:1:8: note: foo::foo(const foo&)
c.cpp:1:8: note: candidate expects 1 argument, 0 provided
Проблема заключается в том, что вы предоставили конструктор, который принимает один аргумент, но вы не предоставили конструктор, который не принимает аргументов. Определение объекта типа foo
(или No
) без инициализатора требует конструктора, который не принимает аргументов.
Если добавить что-то вроде:
foo() { }
внутри определения класса, он компилируется без ошибок. Или я могу изменить объявление объекта из
foo obj;
в
foo obj(42);
, призывающее предоставленный конструктор.
Один из этих вызовов - несуществующий конструктор по умолчанию. – chris
Первый (Узел * нет [10]) является объявлением массива указателей на узел, второй (Node no [10]) является объявлением массива структур узла. – rkosegi
[Что такое правило по часовой стрелке/спираль] (http://c-faq.com/decl/spiral.anderson.html)? – Mahesh