这是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);
}
这是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);
}
返回一个数组并不是你在C++中可以做到的。
你的功能实际上返回一个指向的ans
的第一要素,这也是个坏消息,因为该数组声明在堆栈上,一旦超出范围的函数返回。
正确的做法是从C++标准库中选择合适的数据结构并使用它。如果由于某种原因你设置了基本类型,你需要想出一个不同的解决方案 - 例如,可能在你的函数内动态地分配数组,并返回一个指针。
char *[]
不是一种类型。这是一个语法错误。你可能想的反而是
char **function()
{
}
不过,话又说回来,你是返回一个数组自动将调用未定义的行为。为什么不让你的函数填充一个字符串向量呢?
void function(std::vector<std::string> &v)
{
v.push_back("foo");
v.push_back("bar");
}
为什么不*返回*向量? –
@KonradRudolph那么,为什么不呢? – 2013-07-04 21:00:37
@KonradRudolph(也许是因为一些古代编译器不会复制elision和RVO。) – 2013-07-04 21:01:16
首先,如果你想声明返回在10个char *
指针原始阵列的功能,正确的语法将
char *retstr(int k)[10]
{
char* ans[10];
return ans;
}
然而,这解决不了任何问题,因为无论用C,也不在C++函数中允许直接返回数组。因此,即使使用正确的语法,直接尝试返回原始数组也不会起作用。
从其他答案中已经建议的方法中选择一种不同的方法。
试试这个:
#include<stdio.h>
#include<math.h>
int n;
char ** retstr(int k)
{
char** ans = (char**) malloc(10 * sizeof(char*));
return ans;
}
您不能返回内置阵列。幸运的是,你甚至不需要使用'std :: array'。 – chris