Причина, по которой вы получаете комментарии, а не ответы, заключается в том, что вы
a) не опубликовали сообщение об ошибке (как упомянуто в комментарии)
b) Ваш код содержит много ошибок и некоторые анти-паттерны.
При использовании пространств имен в C ++ принято использовать полное пространство имен в заголовке
std::list<Vertice> *N; // member declaration
и объявление "using" в модуле.
using namespace std;
...
list<Vertice> Vertice::getList() const // return by value, mark as const
{
return N; // you don't need this->N in C++
}
Однако многие люди предпочитают просто вводить полное пространство имен всегда, поэтому, если вам будет легче это понять, попробуйте использовать это.
Чего вы пытаетесь достичь с помощью этого кода? Я спрашиваю, потому что динамическое выделение "std :: list" немного странно. «Std :: list» предназначен для управления памятью, что делает этот код читаемым как «выделить указатель для хранения адреса памяти, которую я собираюсь выделить». Я сильно подозреваю, что вы пытаетесь создать рекурсивную структуру (дерево). Удивительно, но C ++ не требует от вас использования указателей для этого (C делает). Может быть, этот шаблон поможет?
class NTree
{
private:
std::list<NTree> children;
};
Я бы посоветовал вам сначала заставить ваш код работать так. Если вам нужно оптимизировать, вы будете лучше контролировать память, тогда вам поможет нечто подобное.
class NTree
{
private:
std::vector<std::unique_ptr<NTree>> children;
};
Это позволит вам, например, переместить дочерний элемент из одного узла (NTree) в другой ( NTree - или другое), безопасным способом. Это позволяет избежать любых затрат на копирование. Это незначительная экономия, если только ваши деревья не станут очень большими или не содержат очень большие объекты. Даже опытные программисты на C ++ попытаются заставить свой код работать, прежде чем пытаться выполнить такую оптимизацию. Невозможно предсказать, будет ли это необходимо или нет, так что всегда тесты до и после.