未知的返回类型错误(C++)

Pas*_*stx 5 c++

我的问题是我需要首先定义我的接口,然后在代码中进一步实现它,但我的问题是,当我实现方法时,应该返回类内部已知类型的函数似乎在类外部未知.

这是我的代码:

class Test {
    class Inner {
    };    
public:    
    Inner* foo (void);
};

Inner* Test::foo(){
}
Run Code Online (Sandbox Code Playgroud)

此代码产生错误,因为类型Inner对于类外部的函数是未知的.任何人都可以帮助我如何创建只返回类内部定义的类型的简单函数?

感谢您的任何帮助.

Arm*_*yan 6

你需要

Test::Inner* Test::foo(){
Run Code Online (Sandbox Code Playgroud)

}

如果成员函数定义在类定义之外,那么返回类型不在类范围内,与函数的其余部分不同,因此您需要显式限定返回类型.


chr*_*ris 5

既然没人提到它,你也可以在C++ 11中做到这一点:

auto Test::foo() -> Inner * {...}
Run Code Online (Sandbox Code Playgroud)

如果完全限定名称很长,这可能很有用.在C++ 14中,您可以不使用尾随类型部分,只需执行以下操作:

auto Test::foo() {...}
Run Code Online (Sandbox Code Playgroud)

这将推断出返回类型.


4pi*_*ie0 3

内部类是嵌套类,外部类Test必须是完全限定的:

Test::Inner* Test::foo() {
    //...
}
Run Code Online (Sandbox Code Playgroud)

因为在全局范围内Inner确实是未知的,只有Test::Inner,所以Inner里面Test是已知的。您还可以Inner在全局范围内有另一个,与 相同Test,这将是 other Inner,而不是Test::Inner