-1

我是使用类/对象的新手。我正在尝试写这样的东西:

class C1{

    main ()
    {
         C2::foo();
    }
};

class C2:public C1
{
public:
    foo()
    {
    }
};

当调用 C2::foo() 时,编译器会抱怨 C2 不是类或命名空间。如果我将类 C2 定义移到前面,则未定义 C1。在这里可以做什么?

4

4 回答 4

2

您可以使用名为 的成员函数创建一个类main,但它不会被调用来启动您 main程序——它需要是一个全局函数(在任何类或命名空间之外)。但是,是的,一个名为的成员函数main非常好(第 3.6.1/3 节):

该名称main未被保留。[示例:可以调用成员函数、类和枚举main,其他命名空间中的实体也可以。--结束示例]

至于如何安排你的代码,你通常会得到这样的结果:

class C1 { 
    int main();
};

class C2 : public C1 { 
public:
    int foo();
    // or perhaps: static int foo();
};

int C1::main() {
    C2::foo(); // given `C2::static int foo();`
    // otherwise: C2 c; c.foo();
}
于 2013-02-26T04:54:40.063 回答
1

main 根本不应该在一个类中。

于 2013-02-26T04:49:10.760 回答
1

不,main不能在班级内。(为了清楚起见,您可以main在类中调用函数,但它们不会成为您程序的入口点。)

(C++ 标准 n3337,第 3.6.1 节)

一个程序应包含一个名为 的全局函数main,它是程序的指定开始。

于 2013-02-26T04:49:11.320 回答
1

amain 可以在类中。但它与入口点不同main,入口点必须是全局的!

这是一个例子:

#include <iostream>

using namespace std;

class C2 {
   public:
     void foo() {
        cout << "Foo!";
    }
};

class C1 {
   public:
     void main() { // not the same as the entry-point `main`
       cout << "What?";
       b.foo();
     }
  private: 
     B b;
};



int main() //actual entry point `main`
{
   A a;
   a.main();
   return 0;
}

但是请注意,您的代码存在严重缺陷,其中之一 - 成员函数必须具有返回类型。(void如果您没有返回任何内容)。其次,foo是一个对象函数,这意味着它只能被一个类型为的对象调用C2

于 2013-02-26T04:55:38.347 回答