为什么main()函数之后的类定义不能工作
Why class defination after main() function will not work?
如果函数是在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);
如果没有定义就声明了一个类,则只能使用指向该类的引用或指针。编译器需要知道类的大小,以定义存储类对象所需的大小。
相关文章:
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- 为什么我不能在主函数之外定义一个类的对象(它继承了另一个类)?
- 用户定义的转换不能在C++中使用static_cast
- 为什么不能将字符指针定义为数组?
- C++自定义删除运算符不能正常工作?
- 表达式必须具有常数值,变量不能用作定义数组大小的常数
- 类定义怎么能不占用内存?
- 为什么不能在C++中重新定义类中的类型名称?
- 为什么我不能定义一元运算符,然后在 MSVC 的模板类中声明具有相同名称的友元二进制运算符?
- 为什么用户定义的转换函数模板不能有推导的返回类型?
- 为什么静态成员函数定义不能有关键字"static"?
- 精神:不能在其规则定义中使用x3::skip(skipper)[一些递归规则]
- 不能在类型说明符中定义联合
- 为什么我不能在同一行中定义两个相同类型的类的成员指针
- 返回"auto"的函数在定义之前不能使用
- 为什么 for 循环不能定义两个作用域的变量?
- 为什么unique_ptr不能阻止自定义删除程序的切片?
- 为什么内部类*定义*不能使用其父类?
- 运算符定义不能正常工作
- 为什么main()函数之后的类定义不能工作