【发布时间】:2013-10-26 19:44:24
【问题描述】:
我正在尝试使用单独的函数从文件中读取一些数据值;遇到两个错误(很久没用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:“正在初始化”:无法从“双”转换为“双 *”
如果我没有将 param 定义为 double 指向的值,我会在反向时得到相同的类型不匹配错误...
我的理解是我应该返回一个指针,该指针指向我的子函数创建的数组的第一个值,并使用它来处理数据。但是当我在 main 中调用该函数时,我似乎无法提取此值。
【问题讨论】:
-
只需返回
std::vector<double>或std::array<double, 14>。 -
该删除会在返回之后被调用吗?
-
@BobbyDigital 当然不是,但至少满足编译器,...
-
您的
error C2556是因为您显然还有另一个FREAD()函数返回其他内容。该错误告诉您不能仅根据返回类型重载函数。 -
@user1558168:您首先得到的错误是由于您的函数的声明和定义不同造成的。您使用
double返回类型(可能在头文件中的某处)声明它,然后使用double *定义它。你没有发布声明,所以我们看不到它。这是你应该注意的。