我正在尝试使用单独的函数从文件中读取一些数据值;我有两个错误(我很长时间没有使用过c ++):
double * FREAD(std::string fpath){
std::string line;
double * params = new double[14];
std::ifstream parameters (fpath);
if (parameters.is_open())
{
for (int b = 0; b < 14; b++) {
parameters >> line >> params[b];
}
}
parameters.close();
return params;
}
抛出
错误C2556:'double * FREAD(std :: string)':重载函数的区别仅在于'double FREAD(std :: string)'
的返回类型
和
错误C2040:'FREAD':'double *(std :: string)'的间接级别与'double(std :: string)'
不同
第二个问题是从我在main中调用函数的行抛出的。
double * param = FREAD(parampath);
错误C2440:'初始化':无法从'double'转换为'double *'
如果我没有将param定义为double所指向的值,则反向得到相同的类型不匹配错误...
我的理解是我应该返回一个指针,该指针指向我的子函数创建的数组的第一个值,并使用它来处理数据。但是当我在main中调用函数时,我似乎无法提取此值。
答案 0 :(得分:6)
最简单,最简单的方法是返回一个容器,例如
#include <array>
std::array<double,14> FREAD(const std::string& fpath)
{
std::string line;
std::array<double, 14> params;
// .... fill params
return params;
}
关于过载错误,您不能通过返回类型重载函数。看起来编译器看到了这两个声明:
double * FREAD(std::string fpath);
double FREAD(std::string fpath);
鉴于上述建议,无论如何都应该删除它们。
答案 1 :(得分:1)
你的error C2556
是因为你显然有另一个FREAD()函数返回别的东西。该错误告诉您不能仅基于返回类型重载函数。
从消息中可以看出,您有两个功能:
double * FREAD(std::string fpath)
double FREAD(std::string fpath)
您只发布了第一个。
C ++只允许你有两个具有相同名称的函数,如果它们采用不同的参数(或成员函数的const
- ness)。您应该为函数指定不同的名称,或者传入一个令牌参数,编译器可以使用该参数来判断您想要哪一个。