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() {
// ...
}