我正在编写一个小型C ++程序,需要将所有代码保存在一个文件中。在其中,我有一个类定义。我想将类定义放在main()函数之后。尝试这样做时,visual studio中的编译器会抱怨,因为类似于类定义必须在main()函数之前。
这有一种方法可以在main()函数之后放置类定义吗?也许有某种宏或预编译技巧?如果代码在main之前使用类def进行编译,那很好,但是在原始源代码中,我需要在main之后使用类def。
int main(){
someClass object;
//remainder of code
}
class someClass{
//class code
}
答案 0 :(得分:8)
这样可行,但真的太可怕了。如果我可以用自己的答案,我愿意。请不要在制作中这样做。
假设文件为test.cc
#if defined(guard)
int main(){
someClass object;
}
#endif
#if !defined(guard)
class someClass
{
};
#define guard
#include "test.cc"
#endif
答案 1 :(得分:3)
您需要先提供完整的声明才能使用您的课程。
您可以转发声明该类,但在您提供完整声明之前,您只能使用类的名称作为指针(不能在堆栈上分配对象)并且不能调用方法。
class someClass;
int main() {
someClass* sc;
// can't allocated sc on heap (new someClass) or call any mehtods (sc->someMethod())
}
class someClass {
// ...
};
答案 2 :(得分:1)
我有一个班级定义。我想把类定义 在main()函数之后。
通常任何理智的编译器都不允许它,但即使它允许一些疯狂的非标准编译器选项,或者奇怪的黑客攻击,它也会是一个可怕的代码,它会在它的生命周期中发臭。 C ++足够灵活,但您需要理解并遵守其语法。您不能实例化一个不完整或缺少的类/结构,因为编译器需要知道它实例化的对象的大小,而没有类声明它是不可能的,
答案 3 :(得分:0)
将您的someClass
声明放入标题文件中,然后将#include
该标题文件放在程序顶部。
答案 4 :(得分:0)
你不能这样做。
此外,为了达到这个限制,你的要求出了问题。
答案 5 :(得分:0)
我会尝试猜测原因:它是一个自动生成的文本,其部分由不同的机制生成,调用序列无法重新排序。如果是这样,我可以建议使用一个基类,该定义可以放在main之前,并从该baseClass派生出someClass。这样你就可以从baseClass调用任何必需的方法。