我知道使用函数原型,并且给人一种印象,当main()
和一个类在同一文件中时,前向类声明可以达到类似的目的。例如,我希望它会编译:
// main.cpp
#include <iostream>
// class prototypes
class MyClass;
int main(void)
{
MyClass myClass;
// do stuff with myClass here
return(0);
}
class MyClass
{
public:
int someInt;
double someDouble;
// more stuff here . . .
};
但是在MyClass myClass;
行,我得到了错误'myClass' uses undefined class 'MyClass'
。我在做什么错了?
P.S。我知道我可以将main()
剪切/粘贴到它使用的所有类的下面,这样可以修复错误,但是我更愿意将main()保留为第一个函数或类。
P.P.S。我知道,在任何规模较大的生产程序中,main()
,.h
内容和.cpp
内容都位于3个单独的文件中。在这种情况下,我试图编写一个小的示例或测试程序,其中main和一个类位于同一文件中。
-编辑--------------
要总结接受的答案和其他评论,总而言之,在C ++中,没有办法实现我想要的。唯一的选择是1)将使用过的类放在main()
之前,或2)将main()
,.h
内容和.cpp
内容放在一个单独的文件中,就像一个大文件一样程序。
这很不幸。其他所有现代语言都支持这一点。我希望在下一个C ++修订版中添加它。
答案 0 :(得分:0)
转发声明只能通过指针或引用使用。
调用构造函数并不属于此类。
我知道我可以将main()剪切/粘贴到它使用的所有类的下面,这样可以修复错误,但是我宁愿将main()保留为第一个函数或类。
这就是为什么通常使用头文件,而不是将所有声明和定义放在main.cpp
文件中的原因。
我知道在任何规模的生产程序中,main(),.h内容和.cpp内容都将位于3个单独的文件中。在这种情况下,我试图编写一个小的示例或测试程序,其中main和一个类位于同一文件中。
尽管如此,您仍然应该坚持这一惯用语,否则其他所有内容最终都将变得一团糟。