2013-07-04 52 views
0

这是retstr的函数声明语句的错误。函数声明错误 - 返回指针数组

“prog.cpp:5:5:错误:错误:前 '[' 令牌 prog.cpp预期不合格-ID预期初始化之前 '[' 令牌”

下面是代码:

#include<stdio.h> 
#include<math.h> 
int n; 
char *[] retstr(int k) 
{ 
     char* ans[10]; 
     return(ans); 
} 
+1

您不能返回内置阵列。幸运的是,你甚至不需要使用'std :: array'。 – chris

回答

0
  1. 返回一个数组并不是你在C++中可以做到的。

  2. 你的功能实际上返回一个指向的ans的第一要素,这也是个坏消息,因为该数组声明在堆栈上,一旦超出范围的函数返回。

正确的做法是从C++标准库中选择合适的数据结构并使用它。如果由于某种原因你设置了基本类型,你需要想出一个不同的解决方案 - 例如,可能在你的函数内动态地分配数组,并返回一个指针。

1

char *[]不是一种类型。这是一个语法错误。你可能想的反而是

char **function() 
{ 
} 

不过,话又说回来,你是返回一个数组自动将调用未定义的行为。为什么不让你的函数填充一个字符串向量呢?

void function(std::vector<std::string> &v) 
{ 
    v.push_back("foo"); 
    v.push_back("bar"); 
} 
+1

为什么不*返回*向量? –

+0

@KonradRudolph那么,为什么不呢? – 2013-07-04 21:00:37

+0

@KonradRudolph(也许是因为一些古代编译器不会复制elision和RVO。) – 2013-07-04 21:01:16

3

首先,如果你想声明返回在10个char *指针原始阵列的功能,正确的语法将

char *retstr(int k)[10] 
{ 
    char* ans[10]; 
    return ans; 
} 

然而,这解决不了任何问题,因为无论用C,也不在C++函数中允许直接返回数组。因此,即使使用正确的语法,直接尝试返回原始数组也不会起作用。

从其他答案中已经建议的方法中选择一种不同的方法。

0

试试这个:

#include<stdio.h> 
#include<math.h> 
int n; 
char ** retstr(int k) 
{ 
    char** ans = (char**) malloc(10 * sizeof(char*)); 
    return ans; 
}