在本地类中定义结构并初始化它

时间:2015-05-19 13:42:32

标签: c++

我们学院的教授给了我们一个棘手的问题,我们必须在该类中的函数和结构中声明一个类,然后从main()调用该函数。我尝试了以下代码:

#include<iostream>
using namespace std;
void fun()
{
    class Test
    {
        public:
        struct X
        {
            int v;
        }x;
        x.v=10;
        void method(void) {
            cout << "Local Class called, v="<<x.v;
        }
    };
    Test t;
    t.method();
}
int main(void)
{
    fun();
    return 0;
}

但是使用ideone编译器(C ++ 4.9.2),它会返回以下错误:

  

prog.cpp:在函数&#39; void fun()&#39;:prog.cpp:17:5:错误:&#39; x&#39;没有命名类型x.v = 10; ^

有人可以详细解释这个问题吗?我尝试使用X :: x.v,但那也没有用。

1 个答案:

答案 0 :(得分:5)

您将赋值x.v=10;放在类范围内,但只有声明和函数定义可以存在。该代码必须包含在函数中,可能是Test的构造函数:

#include <iostream>

void fun()  
{
   class Test 
   {
   public:
      struct X
      {
         int v;
      } x;

      Test()
      {
         x.v = 10;
      }

      void method()
      {
         std::cout << "Local class called; v = " << x.v << std::endl;
      }
   };

   Test t;
   t.method();  
}

int main()
{
   fun();
}

live demo