为了保持一些代码可读并避免拼写错误,我在头文件的类定义的public
部分使用以下语句:
using Assembly_Tuple = std::tuple <std::vector <std::string>, Trigger_Map, Attribute_Map>;
我在Assembly_Tuple
作为返回类型的头文件中声明了一个函数:
Assembly_Tuple merge_node_attributes(const std::string& node_name, std::string tmpl_name="");
我在源文件中定义了这个函数:
Widget_Server_Interface::Assembly_Tuple
Widget_Server_Interface::merge_node_attributes(const std::string& n, const std::string& t)
{
//...
}
但是当我尝试编译时,我收到以下错误:
src/WidgetServer/WidgetServerInterface.cpp:31:1: error: ‘Assembly_Tuple’ in ‘class Widget_Server_Interface’ does not name a type
但是,在内部定义中,没有任何问题。
如果我将那条线改为恶劣的:
std::tuple<std::vector<std::string>, Trigger_Map, std::map<int,Node_Value>>
Widget_Server_Interface::merge_node_attributes (...) {...}
好,没事。显然,问题在于使用范围之外的别名,即使它是公开的
我明确地调用了类名称空间。
我查看了Bjarne的书,但无论这是否合法,他都不会在任何地方提及。
这是使用gcc 4.7。
大多数情况下,我只想知道为什么这不是有效的。