在不同名称空间中对类进行前向声明

时间:2019-01-17 17:42:28

标签: c++ c++17

我已经搜索了有关前向声明的问题,但是找不到我的案子的答案。

我有一个Foo课:

Foo.h

#pragma once

#include <string>

namespace aaa::xxx::yyy::zzz
{
    class Foo {
    public:
        Foo() = default;

        std::string get_value() const
        {
            return m_value;
        }

        void set_value(const std::string& value)
        {
            m_value = value;
        }
    private:
        std::string m_value{};
    };
}

class Foo用于另一个class Bar

Bar.h

#pragma once

namespace aaa::xxx::yyy::zzz 
{
    class Foo;
}

namespace aaa::bbb::ccc::ddd
{
    using Foo = aaa::xxx::yyy::zzz::Foo;

    class Bar 
    {
    public:
        Bar() = default;

        Foo get_foo() const;
    private:
        Foo m_foo{};
    };

}

Bar.cpp

#include "Bar.h"

#include "Foo.h"

namespace aaa::bbb::ccc::ddd
{
    using Foo = aaa::xxx::yyy::zzz::Foo;

    Foo Bar::get_foo() const
    {
        return m_foo;
    }

}   

现在我不知道我在forwad声明中做错了什么。我在class Bar之前用其名称空间声明了Foo类,但仍然声明class Foo未定义。

所以问题是如何正确转发Foo类?

编辑: 按照建议将Foo m_foo{};更改为Foo m_foo;仍然会产生相同的错误。

0 个答案:

没有答案