1

我正在尝试使用单独的函数从文件中读取一些数据值;我收到两个错误(我很长时间没有使用 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 中调用函数时,我似乎无法提取这个值。

4

2 回答 2

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);

鉴于上述建议,您无论如何都应该删除它们。

于 2013-10-26T19:48:11.723 回答
1

error C2556是因为你显然有另一个 FREAD() 函数返回其他东西。该错误告诉您不能仅根据返回类型重载函数。

从消息来看,在我看来你有两个功能:

  • double * FREAD(std::string fpath)
  • double FREAD(std::string fpath)

你只发了第一个。

const如果它们采用不同的参数(或成员函数的 -ness),C++ 仅允许您拥有两个具有相同名称的函数。您应该为您的函数指定不同的名称,或者传入一个标记参数,编译器可以使用该参数来判断您想要哪个。

于 2013-10-26T19:51:49.393 回答