我在创建返回自己的结构的函数时遇到了麻烦。
标头:
#ifndef FOOD_H
#define FOOD_H
#include <string>
class Food
{
public:
Food();
~Food();
public:
struct Fruit {
std::string name;
};
struct Person {
Fruit favorite;
Fruit setFavorite(Fruit newFav);
};
public:
Fruit apple;
Fruit banana;
Person Fred;
};
#endif
CPP:
#include "Food.h"
Food::Food()
{
}
Food::~Food()
{
}
Fruit Food::Person::setFavorite(Fruit newFav)
{
return newFav;
}
主要:
#include "Food.h"
#include <iostream>
int main() {
Food fd;
fd.Fred.favorite = fd.Fred.setFavorite(fd.apple);
std::cout << fd.Fred.favorite.name;
system("pause");
}
我的错误是:
E0020标识符“水果”未定义Food.cpp 11
E0147声明与“ Food :: Fruit Food :: Person :: setFavorite(Food :: Fruit newFav)”(在Food.h的第17行声明)不兼容。Food.cpp 11
我该如何解决这些问题,有没有更好的方法来编写此代码?
最佳答案
identifier "Fruit" is undefined
此错误表明
Fruit
没有定义。您已经定义了嵌套在
Fruit
中的类Food
。因此,从其他错误消息可以看出,该类的标准名称是Food::Fruit
:declaration is incompatible with "Food::Fruit Food::Person::setFavorite(Food::Fruit newFav)"
^^^^^^^^^^^
此错误消息告诉您声明
Food::Person::setFavorite(Fruit newFav)
是不兼容的,因为该函数应该返回Food::Fruit
而不是Fruit
(这是没有定义的东西)。Fruit
可用于在类Food::Fruit
的上下文中引用Food
。该函数的定义在类之外,因此不在上下文内。直到功能名称(Food::Person::setFavorite
)才建立上下文。您可以使用尾随返回类型来避免使用完全限定类型:auto Food::Person::setFavorite(Fruit newFav) -> Fruit
关于c++ - 如何在C++中返回自己的结构?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48143803/