类中的类:"不是类型"错误

Class inside a class: 'is not a type' error

本文关键字:类型 错误      更新时间:2023-10-16

这是我尝试的一个简化版本

#include <iostream>
using namespace std ;
class a
    {
    public:
    a(int xinit, int yinit){x=xinit; y=yinit;}
    private:
    int x, y;
    };
class b
    {
    public:
    b(int pinit, int qinit){p=pinit; q=qinit;}
    private:
    int p,q;
    a Test(p,q);
    };
int main()
    {
    return 0;
    }

在编译时,它给出错误'p'不是类型。谁能告诉我怎么了?

最烦人的解析。a Test(p,q);被解析为一个函数声明。您不希望这样(我假设)-相反,您希望将成员声明为a Test;并在构造函数中对其赋值。

你能做的就是显式初始化它:

public:
b(int pinit, int qinit): p(pinit), q(qinit), Test(p, q) { }

这一行

a Test(p,q)

声明返回类型为a的方法,并接受类型为pq的(匿名)参数。您可能想使用:

a Test(int p, int q);

如果你想将它声明为类属性,你必须为类a创建非参数构造函数:

a() {}

在构造函数中初始化Test:

b(int pinit, int qinit)
{
    p=pinit;
    q=qinit;
    Test=a(p,q);
}

或者使用初始化语法:

b(int pinit, int qinit):
    p(pinit),
    q(qinit),
    Test(pinit,qinit)
{
}

您没有为函数Test的参数声明数据类型

a Test(p,q);

必须是这样的:

a Test(int p, int q);

您可以这样编写代码

#include <iostream>
using namespace std;
class a
{
public:
    a(int xinit, int yinit){x=xinit; y=yinit;}
private:
    int x, y;
};
class b
{
public:
    b(int pinit, int qinit):p(pinit), q(qinit), Test(p, q){}
private:
    int p,q;
    a Test;
};
int main()
{
    return 0;
}