为什么main()函数之后的类定义不能工作

Why class defination after main() function will not work?

本文关键字:定义 不能 工作 之后 main 函数 为什么      更新时间:2023-10-16

如果函数是在main()函数之后定义的,程序将会工作…

void printdata(int i);
int main()
{
  printdata(20);
  return 0;
}
void printdata(int i)
{
  std::cout << "i = " << i << std::endl;
}
如果我们在main函数之前声明class,在main函数之后定义,为什么会出错?
#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);

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