我的目标是一个类:
class UserInformation
{
public:
userInfo getInfo(int userId);
private:
struct userInfo
{
int repu, quesCount, ansCount;
};
userInfo infoStruct;
int date;
};
userInfo UserInformation::getInfo(int userId)
{
infoStruct.repu = 1000;
return infoStruct;
}
但是编译器给出了错误,即在定义公共函数getInfo(int)
时,返回类型userInfo
不是类型名称。
答案 0 :(得分:15)
将嵌套结构类型设置为public是有意义的,因为用户代码应该能够使用它。此外,将结构的声明放在首次使用之前。在类范围之外,使用范围分辨率 :: 来引用嵌套类型。
class UserInformation
{
public:
struct UserInfo
{
int repu, quesCount, ansCount;
};
public:
UserInfo getInfo(int userId);
private:
UserInfo infoStruct;
int date;
};
UserInformation::UserInfo UserInformation::getInfo(int userId)
{
infoStruct.repu = 1000;
return infoStruct;
}
答案 1 :(得分:5)
如果成员函数是公共的,那么返回类型必须是公开可见的!因此,将内部结构定义移动到public
部分。
另请注意,必须在之前定义使用它的函数。
答案 2 :(得分:4)
您需要更改UserInformation
成员的顺序,并将struct UserInfo
置于上方{/ 1}}。编译器抱怨它无法计算出getInfo
的签名,因为它还没有看到它的返回类型的定义。
此外,如果从函数返回结构,则结构的类型必须对调用者可见。所以你需要制作结构getInfo
。
答案 3 :(得分:4)
只需UserInformation::userInfo UserInformation::getInfo(int userId)
。
此外,您应该声明userInfo
公开。