这是我正在尝试的简化版本
#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'不是一种类型。谁能告诉我什么是错的?
答案 0 :(得分:8)
Most vexing parse。 a 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
并获取p
和q
类型的(匿名)参数。
你可能想用:
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;
}