如何正确完成?需要事先声明它,以将其用作类中某个函数的返回值。甚至有可能吗?
例如:
class foo
{
struct in_foo;
public:
in_foo * func();
};
答案 0 :(得分:3)
是的,您可以做到。这是一个示例:
class foo
{
struct in_foo;
public:
in_foo * func();
};
struct foo::in_foo {
};
foo::in_foo* foo::func()
{
return nullptr;
}
int main()
{
foo f;
auto p = f.func(); // ok
// the following would be an error:
// foo::in_foo* p2 = f.func();
}
请注意,如上所述,您只能使用foo:in_foo
来声明auto
的变量(因为foo:in_foo
是私有的)。
答案 1 :(得分:0)
很难理解问题是什么,但是答案可能是“可以” ...
foo.h 文件:
class foo
{
public:
struct in_foo;
in_foo * func();
};
foo.cpp 文件:
#include <iostream>
#include"foo.h"
struct foo::in_foo
{
int i;
};
foo::in_foo* foo::func()
{
foo::in_foo* res = new foo::in_foo();
res->i = 23;
return res;
}
int main()
{
foo::in_foo* temp = foo().func();
std::cout << temp->i;
delete temp;
}
此代码将输出23
。
请注意,struct in_foo;
必须在public
语句之后,否则main不能声明foo::in_foo* temp