为了保持一些代码的可读性并避免拼写错误,我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。
大多数情况下,我只想知道为什么这是无效的。