C+中的返回数组+; 我是一个完全C++ NoOB,而且从我的方法返回数组有点麻烦。我有一个具有以下方法声明的头文件: virtual double[] echoDoubleArray(double[] doubleArray, int arraySize) throw (RemoteException);

C+中的返回数组+; 我是一个完全C++ NoOB,而且从我的方法返回数组有点麻烦。我有一个具有以下方法声明的头文件: virtual double[] echoDoubleArray(double[] doubleArray, int arraySize) throw (RemoteException);,c++,arrays,return,C++,Arrays,Return,这给了我以下错误: ../common/EchoService.h: At global scope: ../common/EchoService.h:25: error: expected unqualified-id before ‘[’ token 返回数组的正确方法是什么?C++不能很好地处理非本地数组,更可能的情况是您应该使用实际的容器,如std::array或std::vector。我认为从函数返回数组是不可能的。C++对非本地数组不起作用,更可能的情况是您应该使用实际的容器,如s

这给了我以下错误:

../common/EchoService.h: At global scope:
../common/EchoService.h:25: error: expected unqualified-id before ‘[’ token

返回数组的正确方法是什么?

C++不能很好地处理非本地数组,更可能的情况是您应该使用实际的容器,如
std::array
std::vector
。我认为从函数返回数组是不可能的。

C++对非本地数组不起作用,更可能的情况是您应该使用实际的容器,如
std::array
std::vector
。我认为不可能从函数返回数组。

您最好使用std::vector,或者如果您确实想返回普通数组,请返回一个动态分配的指针(指向这样的数组),例如

double* arr = new double[arrSize];
// fill arr appropriately
return arr;

但是我建议返回一个std::vector来代替它。

你最好使用std::vector,或者如果你真的想返回一个普通数组,返回一个指针(指向这样一个数组),该指针是动态分配的,例如

double* arr = new double[arrSize];
// fill arr appropriately
return arr;

<>但我建议返回一个<代码>:ST::vector < /COD>。

< P>数组的C++语法是:<代码> STD::vector < /COD>而不是<代码>双倍[] /代码>。它还要求您将
#include
放在源文件顶部附近。除此之外,它们的工作与C数组非常类似。

< P>数组的C++语法是:<代码> STD::vector < /COD>而不是<代码>双倍[] /代码>。它还要求您将
#include
放在源文件顶部附近。除此之外,它们的工作原理与C-数组非常相似。

要更直接地回答您的问题,如果您声明一个双精度数组,如下所示:

double doubleArray[] = {1.0, 2.0, 3.0};
您可以这样声明该方法:

virtual double *
echoDoubleArray(double* doubleArray, int arraySize) throw (RemoteException);

数组作为指针传递。如果你想使用C++的真实能力,那么请遵循其他答案中提供的建议。< /p> 更直接地回答你的问题,如果你声明一个双打数组如下:

double doubleArray[] = {1.0, 2.0, 3.0};
您可以这样声明该方法:

virtual double *
echoDoubleArray(double* doubleArray, int arraySize) throw (RemoteException);

数组作为指针传递。如果你想使用C++的真实能力,那么请按照其他答案中的建议。

< p>对不起,每个人都在告诉你使用现代STL类型编程而不是回答你的问题。他们是对的。但你仍然应该了解事情是如何运作的。返回数组的问题是,在函数中创建的数组将位于堆栈上。当你离开你的职能,他们将不再存在。您可以做的是返回一个指向堆上数组的指针。进一步研究一下堆栈和堆,以便理解。但是下面是一个简单的C++函数,返回堆上分配的数组。
#include <iostream>

double * MakeArray()
{
   double *mydouble = new double[5]; 
   mydouble[1]=1.1;
   mydouble[1]=2.2;
  return mydouble;
}

int main()
{

  double *d=MakeArray();
  std::cout<<d[1]<<d[2];
  delete[] d; 
}
#包括
double*MakeArray()
{
double*mydouble=新的双精度[5];
mydouble[1]=1.1;
mydouble[1]=2.2;
返回mydouble;
}
int main()
{
double*d=MakeArray();

std::cout很抱歉,似乎每个人都在告诉你使用现代STL类型编程,而不是回答你的问题。他们是对的。但你仍然应该理解事情是如何工作的。返回数组的问题是,在函数中创建的数组将在堆栈上。当你离开函数时,它们不会返回你可以做的是返回一个指针到堆上的一个数组。研究一下栈和堆的理解。但是下面是一个简单的C++函数,返回堆上分配的数组。
#include <iostream>

double * MakeArray()
{
   double *mydouble = new double[5]; 
   mydouble[1]=1.1;
   mydouble[1]=2.2;
  return mydouble;
}

int main()
{

  double *d=MakeArray();
  std::cout<<d[1]<<d[2];
  delete[] d; 
}
#包括
double*MakeArray()
{
double*mydouble=新的双精度[5];
mydouble[1]=1.1;
mydouble[1]=2.2;
返回mydouble;
}
int main()
{
double*d=MakeArray();

std::cout有一种技术可以将不衰减的数组传递给指针。您可以使用下面的语法通过引用传递数组。所需的“额外”参数是语法上的一个缺点,可能也是这种用法不常见的原因。考虑到它的优点,人们很快就会习惯它

void sub(double (&foo)[4])
{
    cout << sizeof(foo) << endl;
}
void sub(双重(&foo)[4])
{

cout有一种将不衰减的数组传递给指针的技术。可以使用下面的语法通过引用传递数组。所需的“额外”参数是语法上的一个缺点,可能也是这种用法不常见的原因。考虑到它的优点,人们很快就会习惯它

void sub(double (&foo)[4])
{
    cout << sizeof(foo) << endl;
}
void sub(双重(&foo)[4])
{

请记住,异常规范已被正式弃用。不要使用异常规范,它们不会做大多数人认为的事情。它们在C++11中已被弃用。返回双精度数组的函数的正确语法为
double foo()[5]但是,C和C++都不允许函数返回数组。记住异常规范是正式的。不要使用异常规范,它们不能像大多数人所想的那样被执行。它们在C++ 11中被贬低了。返回一个双倍数组的函数的正确语法是<代码>双足()。但是,C和C++都不允许函数返回数组。这个答案非常误导。解释代码是如何误导的,<代码>:ST::vector < /COD>是数组的替代,不是替换它们。C++仍然有C风格数组,它们在所有令人困惑的指针依赖的荣耀中。我否决了,因为数组的C++语法不是<代码】。Std::Vector <代码>。这个解释非常误导。<代码> STD::向量是数组的替代,不是替换它们。C++仍然有C风格数组在它们所有的依赖于指针的荣耀中。我否决了,因为C++的语法不是数组,而是代码:STD::vector < /代码>。问题不是真的THA。t数组在堆栈上。返回的其他所有内容也在堆栈上,包括指向函数中动态数组的指针。Mooing Duck更准确地说明了问题“C++不能很好地处理非本地数组”,因为几乎所有其他构造都可以通过值返回,而