我已经搜索了有关前向声明的问题,但是找不到我的案子的答案。
我有一个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;
仍然会产生相同的错误。