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

5

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

这是我的代码:

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

Inner* Test::foo(){
}

这段代码因为函数外部未知类型 Inner 而产生错误。有没有人可以帮我编写一个简单的函数,仅返回类内定义的类型?

感谢任何帮助。


3
Test::foo() 返回 Test::Inner* 类型。 - user2249683
5个回答

6

你需要

Test::Inner* Test::foo(){

如果成员函数定义在类定义之外,则返回类型不在类作用域内,与其余部分的函数不同,因此您需要明确限定返回类型。

5

既然没有人提到,你也可以在C++11中这样做:

auto Test::foo() -> Inner * {...}

如果完全限定名称很长,可以使用这种方法。 在C++14中,您可以省略尾随类型部分,只需执行:

auto Test::foo() {...}

这将推导出返回类型。

3

Inner是一个嵌套类,在外部类Test中需要完全限定:

Test::Inner* Test::foo() {
    //...
}

因为在全局范围内,Inner确实是未知的,只有Test::Inner,所以Test内部的Inner是已知的。你也可以在全局范围内拥有另一个Inner,就像Test一样,这将是另一个Inner,而不是Test::Inner


3
你似乎没有指定“范围”,所以它当然是未知的。C++编译器将在Test类之外查找Inner类,该类也可能呈现为不同的类,但在你的情况下并非如此。 因此,即使是返回类型,你也需要提供范围。这并不意味着你必须在Test类中使用范围,但是在类外,由于这个原因,你必须使用它。 因此,正确的代码应该像这样:
class Test {
    class Inner {
    };    
public:    
    Inner* foo (void);
};

Test::Inner* Test::foo(){
//^^^^
}

严格来说,如果您使用的是最新的编译器,甚至可以使用auto关键字,但这样可能会稍微减少代码的全面性。


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

Test::Inner* Test::foo(){
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接