1

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

#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' is not a type。谁能告诉我怎么了?

4

4 回答 4

8

最令人头疼的解析a Test(p,q);被解析为函数声明。您不希望那样(我假设)-相反,您希望将成员声明为a Test;并在构造函数中分配它。

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

public:
b(int pinit, int qinit): p(pinit), q(qinit), Test(p, q) { }
于 2013-06-03T10:37:51.307 回答
2

通过这条线

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)
{
}
于 2013-06-03T10:37:43.250 回答
0

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

a Test(p,q);

应该是这样的:

a Test(int p, int q);
于 2013-06-03T10:37:07.670 回答
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;
}
于 2013-06-03T13:00:20.980 回答