我想知道是否可以转发声明在另一个类范围内定义的枚举.例如,请考虑以下事项:
//A.h
class A
{
public:
enum class type: unsigned long { /*some stuff*/ }
};
Run Code Online (Sandbox Code Playgroud)
现在,在另一个标题中,我想转发声明'type'枚举(假设下面的B类有一个用A :: type做某事的函数)
//B.h
enum A::type; //use of undefined type 'A'
class B
{
public:
UseTypeEnum(A::Type&);
};
Run Code Online (Sandbox Code Playgroud)
这也不起作用:
//B.h
class A;
enum A::type; //still use of undefined type
class B...
Run Code Online (Sandbox Code Playgroud)
如果在Ah中将枚举声明为全局范围,则没有问题
有没有办法做到这一点?
我有这样的事情:
class Bar;
class Foo()
{
public:
Foo() : bar(new Bar());
Bar& GetBar() { return *bar.get(); }
private:
std::unique_ptr<Bar> bar;
};
void main()
{
Foo foo;
auto bar1 = foo.GetBar();
auto bar2 = foo.GetBar(); //address of bar2 != address of bar1. why?
Bar& bar3 = foo.GetBar();
Bar& bar4 = foo.GetBar(); //address of bar3 == address of bar4.
}
Run Code Online (Sandbox Code Playgroud)
似乎'auto'变量是副本,因为我没有使用相同的内存地址返回Bars.如果我明确地将变量定义为Bar引用(Bar&),那么一切都按照我的预期运行.
我应该提到我正在编译vs2012.这里发生了什么?
谢谢.