2013-10-26 93 views
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: '双* FREAD(的std :: string)' : 'FREAD'::重载函数仅通过从返回类型 '双FREAD(的std :: string)'

错误C2040的区别 '双*(的std :: string)'与'double(std :: string)'有间接的级别差异

第二个问题是从我调用main函数的那一行引发的。

double * param = FREAD(parampath); 

错误C2440:“初始化”:无法从“双师型”作为一种价值指向的双重转换为“双*”

如果我不定义PARAM的,我得到相反的类型不匹配错误...

我的理解是,我应该返回一个指针,它指向我的子函数创建的数组的第一个值,并使用它来处理数据。但当我在main中调用函数时,我似乎无法拉出这个值。

+2

只需返回一个'std :: vector '或一个'std :: array '。 – juanchopanza

+0

这个删除在返回后会被叫做*吗? – ChiefTwoPencils

+0

@BobbyDigital当然不是,但至少满足编译器,...... –

回答

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

你的error C2556是因为你显然有另一个返回别的东西的FREAD()函数。该错误告诉您,您不能仅基于返回类型重载函数。

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

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

你只发布了第一个。

如果C++采用不同的参数(或成员函数的const -ness),则只允许您使用两个具有相同名称的函数。你应该为你的函数提供不同的名字,或者传递一个令牌参数,编译器可以用它来告诉你想要哪一个。

+0

我没有更新我的函数原型,谢谢。 – user1558168

+0

也会这样做。 – Adam