为什么setVal的返回类型是string类型,参数类型是double类型
SwingUtilities.invokeLater()
答案 0 :(得分:4)
当在命名空间范围内定义成员函数时,C ++为跟随 declarator-id (3.4.1 / 8)的非限定名称提供特殊名称查找规则。在查找命名空间范围之前,会在类范围中查找这些名称。
由于"普通"中的返回类型成员函数定义在函数的 declarator-id 之前,上述特殊规则不适用于它。它按照"通常"规则:在命名空间范围内。
因此,您的函数定义的返回类型是::Type
,而不是Exercise::Type
。它与类中的任何声明都不匹配。代码格式不正确。
如果您希望在类范围中查找非限定返回类型名称,请在函数声明中使用新的尾随返回类型语法,因为在此语法中返回类型如下函数的 declarator-id
auto Exercise::setVal(Type parm) -> Type {
val = parm + initVal();
return val;
}
答案 1 :(得分:0)
该代码无法编译,我无法弄清楚它应该做什么,但我认为您的问题的答案是参数类型为{{1 ,返回值的类型为Exercise::Type
,即全局typedef。如果您希望它们匹配,那么在类定义之外定义::Type
时,您需要将返回值完全指定为setVal
,如下所示:
Exercise::Type
答案 2 :(得分:-1)
因为局部变量会自动覆盖全局变量。