【问题标题】:Int main inside a class类中的 int main
【发布时间】:2014-06-07 14:17:53
【问题描述】:

简单的问题,我怎样才能在一个类中运行一个包含 main 的程序? 我有一个代码:

MojSwiat2.cpp:

int Main::main() {
    // code 
    return 0;
}

还有 MojSwiat2.h:

class Main {
public:
    int main();
};
Main run;
int Main::main() { // with this I have error: function int Main::main(void) already has a body
    run.main();
} // and without I got unresolved external symbol _main referenced in function __tmainCRTStartup

我需要这样做的原因:Accessing protected members of class from main

【问题讨论】:

    标签: c++ class main


    【解决方案1】:

    通过定义一个普通的main,它只包含对其他函数的调用。像这样:

    int main(int, char**) {
        return Main().main();
    }
    

    【讨论】:

    • 完美运行!你能解释一下 (int, char**) 做什么以及为什么需要它吗?这是为了控制台使用吗?我的意思是,从终端运行?
    • 它们是没有名字的参数。这告诉编译器会有intchar** 类型的两个参数,但你永远不会使用它们。你可能更习惯int main(int argc, char* argv[]),这完全一样,只是编译器可能会给出警告,因为argcargv都没有被使用过。
    • 感谢您的简短解释 :)
    • int main() { /* ... */ } 也是main 的有效且可移植的定义;无需定义匿名参数。
    • @KeithThompson 确实,我之所以选择这个版本,是因为我通常最终都会使用参数;)
    【解决方案2】:
    int main(int argc, char* argv[])
    {
        Main m;
        return m.main();
    }
    

    或者如果 Main::main 被声明为静态

    int main(int argc, char* argv[])
    {
        return Main::main();
    }
    

    【讨论】:

      【解决方案3】:

      你仍然需要定义main

      class my_app {
         int main(int argc, char* argv[])
         {
            // ...
         }
      }
      
      my_app app;
      
      int main(int argc, char *argv[])
      {
         return app.main(argc, argv);
      }
      

      【讨论】:

      • 编译器可能允许您设置入口点,但这是不可移植且非标准的。
      猜你喜欢
      • 1970-01-01
      • 2016-01-05
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-26
      • 1970-01-01
      相关资源
      最近更新 更多