Visual Studio 2019 C++报错「仅靠返回值无法区分函数重载」求助
问题根因
你遇到的编译报错是头文件中声明顺序错误导致的:
你在Header.h中先声明了返回值为myMatrix类型的read2Mat函数,但myMatrix类的定义放在了该函数声明的后面。C++编译器是从上到下顺序解析代码的,解析到read2Mat函数声明时,还没有识别到myMatrix类型的定义,会默认将返回值处理为int类型;等到解析Functions.cpp中的函数实现时,此时myMatrix已经完成定义,返回值是明确的myMatrix类型,编译器就会判定出现了两个参数列表完全一致、仅返回值不同的重名函数,因此触发cannot overload functions distinguished by return type alone的报错。
修复方案
调整Header.h中的代码顺序:
- 先完成
myMatrix类的定义 - 再声明返回值为
myMatrix类型的read2Mat函数
调整后的Header.h核心结构示例:
#pragma once #include <iostream> #include <Eigen/Dense> #include <fstream> #include <sstream> #include <vector> using namespace Eigen; // 先放myMatrix类的完整定义 class myMatrix { // 原有类的成员定义全部保持不变 }; // 再声明所有全局函数 bool is_number(const std::string& str); unsigned int countWords(const std::string& str); void readGeneral(const std::string& filename, std::vector<std::string>& vec); myMatrix read2Mat(const std::string& filename, unsigned int mode);
其他可修复的隐含问题
read2Mat函数mode==2分支中,构造myMatrix时第三个参数误写为1,需改为2才能正常初始化ids1向量myMatrix类的ref1方法错误返回了ids0[i],需改为返回ids1[i]避免逻辑错误
内容的提问来源于stack exchange,提问作者Christian Bernal
相关产品推荐
相关产品推荐

