关于c ++对象创建

时间:2012-03-06 14:19:32

标签: c++

在以下程序中:

using namespace std;
class c1;
class c2;
int main(int argc,char* argv[])
{
   **c1 obj;
   c2 obj_c2 = obj.method1();**
   return0;
}
class c1
{
public:
  c2 method1()
  {
     c2 obj1;
     return obj1;
  }
};
class c2
{
public:
  int method2()
  {
    return 1;
  }

};

在main函数内部,两行代码给出了错误。我无法编译。

3 个答案:

答案 0 :(得分:5)

您无法定义不完整类型的变量。如果在类中定义成员函数,则定义必须在main(和c2之前c1之前可见:

class c2 {
    // ...
};

class c1 {
    // ...
};

int main() {
    // ...
}

此外,将来,请始终在您的问题中包含错误。

答案 1 :(得分:4)

您需要先定义这两个类,然后才能将它们用作完整类型:

class c2
{
public:
  int method2()
  {
    return 1;
  }

};

class c1
{
public:
  c2 method1()
  {
     c2 obj1;
     return obj1;
  }
};

int main(int argc,char* argv[])
{
   c1 obj;
   c2 obj_c2 = obj.method1();
   return 0;
}

在这种情况下,前向声明不会削减它,因为你不仅要声明指针,而且还要尝试实例化这些类型的对象。

但是,我建议你在头文件中移动你的类声明。

出于同样的原因,您需要在c2之前定义c1,因为c1需要使用完整类型c2

答案 2 :(得分:1)

当您尝试在c1中使用它们时,

c2main是不完整的类型。在main之前移动他们的声明(a.k.a主体)。您在return中的main之后错过了一个空格。

我认为**'都不是实际程序的一部分。