Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 关于c++;对象创建_C++ - Fatal编程技术网

C++ 关于c++;对象创建

C++ 关于c++;对象创建,c++,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 method

在以下程序中:

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;
  }

};

在主函数中,两行代码给出了错误。我无法编译。

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

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;
}
在这种情况下,转发声明并不能解决这个问题,因为您不仅要声明指针,而且实际上还要尝试实例化这些类型的对象

但是,我建议您将类声明移动到头文件中


根据同样的推理,您需要在
c1
之前定义
c2
,因为
c1
需要使用完整类型
c2

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


此外,今后,请始终在问题中包含错误。

c1
c2
main
中使用时,它们是不完整的类型。将其声明(又称主体)移动到
main
之前。在
main
中的
返回后缺少空格


我假设
**
'
都不是实际程序的一部分。

我们可以自己看看,当然。但是如果你能把你的错误写在问题里就好了。使这一切更容易理解。
main
第二行的两个星号有什么意义?@daknok\t他正试图突出这两行,作为给他带来错误的行。请编辑您的问题并包括实际的错误描述。@Muthu不仅仅是一个转发声明,但是在使用类之前移动完整声明。
classx是一个声明<代码>类X{}是一个定义。成员函数可能尚未定义,但类型本身已定义。值得一提的是,您重新排序了
c2
c1
的定义。
class c2 {
    // ...
};

class c1 {
    // ...
};

int main() {
    // ...
}