将数组作为指针返回

时间:2013-10-26 19:44:24

标签: c++ arrays

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

2 个答案:

答案 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)。您应该为函数指定不同的名称,或者传入一个令牌参数,编译器可以使用该参数来判断您想要哪一个。