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

时间:2013-06-03 10:34:56

标签: c++

这是我正在尝试的简化版本

#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'不是一种类型。谁能告诉我什么是错的?

4 个答案:

答案 0 :(得分:8)

Most vexing parsea Test(p,q);被解析为函数声明。您不希望这样(我假设) - 相反,您希望将成员声明为a Test;并将其分配给构造函数。

所以你可以做的是明确地初始化它:

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

答案 1 :(得分:2)

通过这一行

a Test(p,q)

declare method返回类型a并获取pq类型的(匿名)参数。 你可能想用:

a Test(int p, int q);

如果要将其声明为类属性,则必须为类a创建非参数构造函数:

a() {}

并在构造函数中初始化Test

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

或者更确切地说使用initializer syntax

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

答案 2 :(得分:0)

您没有为函数Test

的参数声明数据类型
a Test(p,q);

必须是这样的:

a Test(int p, int q);

答案 3 :(得分:0)

你可以写这样的代码

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