【发布时间】:2018-06-17 01:10:03
【问题描述】:
我在创建返回我自己的结构的函数时遇到问题。
标题:
#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 标识符“Fruit”未定义 Food.cpp 11
E0147 声明与“Food::Fruit Food::Person::setFavorite(Food::Fruit newFav)”不兼容(在 Food.h 第 17 行声明)Food.cpp 11
我该如何解决这些问题,是否有更好的方法来编写此代码?
【问题讨论】:
-
错误信息不言自明:
Fruit=>Food::Fruit -
我不知道它告诉我什么与什么不兼容或如何解决它。
-
将您的代码与错误消息中的声明进行比较。这是编译器所期望的。
-
好的,知道了。我不确定如何阅读错误。非常感谢。
-
fd.Fred.favorite = fd.Fred.setFavorite(fd.apple);有点奇怪。setFavorite没有达到人们对 setter 函数的期望:它没有设置Food::Person::favorite。我希望fd.Fred.setFavorite(fd.apple);到favorite = newFav;并且什么都不返回。
标签: c++ function struct return visual-studio-2017