C++ 为什么main()函数之后的类定义不起作用?

C++ 为什么main()函数之后的类定义不起作用?,c++,class,C++,Class,如果函数是在main()函数之后定义的,则程序将运行 void printdata(int i); int main() { printdata(20); return 0; } void printdata(int i) { std::cout << "i = " << i << std::endl; } 如果声明一个类而不定义它,则只能使用指向该类的引用或指针。编译器需要知道类的大小,以定义存储其对象所需的大小。之前,必须让使用类的任何代

如果函数是在main()函数之后定义的,则程序将运行

void printdata(int i);

int main()
{
  printdata(20);
  return 0;
}

void printdata(int i)
{
  std::cout << "i = " << i << std::endl;
}

如果声明一个类而不定义它,则只能使用指向该类的引用或指针。编译器需要知道类的大小,以定义存储其对象所需的大小。

之前,必须让使用类的任何代码看到它的声明。
#include <iostream>

class C;

int main()
{
  C c(20);
  c.printdata();
  return 0;
}

class C
{
  int i;

public:
  C(int a) : i(a) {};
  void printdata()
  {
    std::cout << "C:i = " << i << std::endl;
  }
};
class_after_main.cpp: In function ‘int main()’:
class_after_main.cpp:7:6: error: variable ‘C c’ has initializer but incomplete type
   C c(20);