在类中声明结构,在源文件中定义

时间:2018-12-23 21:23:03

标签: c++

如何正确完成?需要事先声明它,以将其用作类中某个函数的返回值。甚至有可能吗?

例如:

class foo 
{
  struct in_foo;
public:
  in_foo * func();
};

2 个答案:

答案 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