在以下程序中:
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函数内部,两行代码给出了错误。我无法编译。
答案 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
中使用它们时, c2
和main
是不完整的类型。在main
之前移动他们的声明(a.k.a主体)。您在return
中的main
之后错过了一个空格。
我认为**
和'
都不是实际程序的一部分。