C ++ (и ROS) — Включить или переслать объявление ссылки с установленным значением по умолчанию и typedef

У меня есть два очень связанных вопроса относительно предварительных деклараций, их преимуществ и различий с #includes. Прочитав их, мне все еще неясно, если:

  • используя ConstPtr из сообщения ROS (например, этот) считается указателем и может быть (как-то) объявлено вперед или требует #include;

  • void foo(const Eigen::Vector3d& scale={0.001, 0.001, 0.001}); в .h файле было бы хорошо с чем-то вроде (но это на самом деле не компилируется)

    namespace Eigen
    {
    
    class Vector3d;
    }
    

на вершине .h после всех других #includeS или если я должен использовать правильный заголовок.

Чтобы быть ясным, второй вопрос с тем, scale имеет значение по умолчанию, которое я всегда буду использовать в .cpp. Это единственный случай, когда я использую Vector3d.

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

-1

Решение

Предварительная декларация X достаточно использовать X* или же X& в качестве параметра функции или члена класса, потому что полное определение класса не требуется, чтобы иметь возможность использовать его адрес.

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

1

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

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

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