如何在C++中返回多个文件中的多个类型和值

How to return multiple types & values in multiple files in C++

本文关键字:类型 文件 返回 C++      更新时间:2023-10-16

我在返回多个类型时遇到问题。我知道有一些人在这方面遇到了麻烦,但我的情况不同。我正在使用头文件,但它们不是。这是我的代码。

//in Fruit.h
#include <string>
#include <tuple>
using namespace std; 
class Fruit { 
private:    
string Fruitname;   
int Fruitamount; 
public:     
Fruit(string name, int amount);     
tuple(string, int) getFruitStats(); 
~Fruit(); 
};

在C++文件中

//in Fruit.cpp
#include "Fruit.h"
#include <string>
#include <tuple>
using namespace std;
Fruit::Fruit(string name, int amount)
{
Fruitname = name;
Fruitamount = amount;
}
tuple<string,int> Fruit::getFruitStats() {
}
Fruit::~Fruit()
{
}

错误消息如下:

  1. 没有重载函数"Fruit::Fruit"的实例与Fruit.cpp中指定的类型行7匹配
  2. 成员"Fruit::string"不是Fruit.cpp中的类型名称行7
  3. C2597非法引用Fruit.cpp中的非静态成员"Fruit::string"第7行
  4. C2146语法错误:Fruit.cpp中标识符"name"第7行前缺少")">
  5. C2143语法错误:缺少";"在Fruit.cpp的第8行"{"之前
  6. C2447"{":Fruit.cpp中缺少函数头(旧式形式列表?)第8行
  7. 类"Fruit"在Fruit.cpp中没有成员"getFruitStats"行12
  8. C2556"std::tuple Fruit::getFruitStats(void
  9. C2371"水果::getFruitStats":重新定义;Fruit.cpp中不同基本类型的行12
  10. Fruit.h中类模板"std::tuple"的参数列表缺少第13行
  11. 应为Fruit.h中的")"行13
  12. 应为Fruit.h中的标识符行13
  13. C2955"std::tuple":类模板的使用需要Fruit.h中第13行的模板参数列表
  14. C2143语法错误:Fruit.h中'13之前缺少')'
  15. C2079"Fruit::string"在Fruit.h中使用了未定义的类"std::tuple"第13行
  16. C2062类型"int"意外为13在水果中。h
  17. C4430缺少类型说明符-假定为int。注意:C++不支持Fruit.h中的默认int行13

第一条错误消息是根本原因。

问题是声明和定义不匹配。在.h文件中,您声明了Fruit::getFruitStats()以返回int。但是,在.cpp文件中,您定义了Fruit::getFruitStats()以返回tuple<string,int>

若要解决此问题,请更改声明的返回类型以匹配定义。(…反之亦然,只要它们匹配)

即,将.h文件中的int getFruitStats();更改为tuple<string,int> getFruitStats();