我在创建返回自己的结构的函数时遇到了麻烦。

标头:

    #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/

10-13 07:05