C ++以任何方式在main()函数之后放置类定义?

时间:2014-01-20 16:35:01

标签: c++ visual-studio

我正在编写一个小型C ++程序,需要将所有代码保存在一个文件中。在其中,我有一个类定义。我想将类定义放在main()函数之后。尝试这样做时,visual studio中的编译器会抱怨,因为类似于类定义必须在main()函数之前。

这有一种方法可以在main()函数之后放置类定义吗?也许有某种宏或预编译技巧?如果代码在main之前使用类def进行编译,那很好,但是在原始源代码中,我需要在main之后使用类def。

int main(){

    someClass object;
    //remainder of code

}


class someClass{

    //class code
}

6 个答案:

答案 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调用任何必需的方法。