使用以下代码
Header.h
namespace some_name {
struct foo {
// using alias
using MyMap = std::map<double, some_class* const>;
MyMap* GetMap();
MyMap* map_;
}
}
Run Code Online (Sandbox Code Playgroud)
Source.cpp
#include "Header.h"
// using declaration
using some_name::foo;
MyMap* foo::GetMap(){
...
return map_;
}
Run Code Online (Sandbox Code Playgroud)
当我编译时,我得到一个编译器错误,指出:
错误:'MyMap'没有命名类型
MyMap*foo :: GetMap(){
^
但是,如果我GetMap()
在头文件中定义一切正常,但如果我将它移动到源文件,我会得到该错误.我在这里错过了什么?
这条线
using some_name::foo;
Run Code Online (Sandbox Code Playgroud)
在您的代码中,只需将名称foo
导入当前范围即可.这意味着只要编译器看到不合格的名称,foo
它就知道你正在使用它some_name::foo
.
但这对你没有帮助MyMap
. MyMap
是的作用域,foo
以便访问你仍然需要使用foo::
喜欢
foo::MyMap* foo::GetMap()
Run Code Online (Sandbox Code Playgroud)
另一种选择是添加另一个using语句来引入MyMap
但是这将使用该名称污染范围,因此您可能不想这样做.如果你这样做,你可以使用
// using declaration
using some_name::foo;
using MyMap = some_name::foo::MyMap;
MyMap* foo::GetMap(){
...
return map_;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
181 次 |
最近记录: |