如果我现在完全误解了C++,我道歉,所以我的问题可能很容易解决。我尝试通过值将一个字符数组传递给一个函数,创建一个相同大小的新数组,并用某些元素填充它,然后从函数中返回该数组。这是我到目前为止所拥有的代码:
char *breedMutation(char genome []){
size_t genes = sizeof(genome);
char * mutation = new char[genes];
for (size_t a = 0 ;a < genes; a++) {
mutation[a] = 'b';
}
return mutation;
}for循环是用来更新新数组的;现在,它只是一段虚拟代码,但希望这个函数的思想是清晰的。然而,当我在main中调用这个函数时,我得到了一个initializer fails to determine size of ‘mutation’错误。这是我在main中的代码:
int main()
{
char target [] = "Das weisse leid"; //dummy message
char mutation [] = breedMutation(target);
return 0;
}我需要学习更多关于指针和字符数组的知识,我意识到这一点,但我也在尝试通过示例来学习。
EDIT:这段代码是breedMutation的基础,我正在尝试为字符数组修改它。
int *f(size_t s){
int *ret=new int[s];
for (size_t a=0;a<s;a++)
ret[a]=a;
return ret;
}发布于 2011-11-27 07:11:22
您的错误是因为您不能将mutation声明为char[],并将breedMutation返回的char*的值赋给它。如果你想这样做,应该将mutation声明为char*,然后在使用完它后声明为deleted,以避免在实际应用程序中发生内存泄漏。
除了动态分配数组并返回数组之外,您的breedMutation函数与f完全不同。f只是创建一个大小为s的数组,并从0开始递增填充数组中的每个索引。如果没有逻辑错误,breedMutation只会用'b'填充数组。
这个错误是sizeof(genome);将返回char*的大小,在普通机器上通常是4或8字节。您需要像f一样传入大小,因为数组在传递给函数时会降级为指针。但是,有了这个代码片段,我就不明白为什么需要传递char genome[]了。
而且,在C++中,您最好使用std::vector甚至std::array这样的容器,而不是动态分配的数组(使用new创建数组),这样您就不必担心释放它们或跟踪它们的大小。在这种情况下,std::string将是一个好主意,因为它看起来像是在尝试处理字符串。
如果你解释了你到底想做什么,它可能会帮助我们告诉你如何解决你的问题。
发布于 2011-11-27 06:57:50
这行代码:
size_t genes = sizeof(genome);将返回sizeof(char*),而不是genome数组中的元素数。您需要将元素的数量传递给breedMutation()函数:
breedMutation(target, strlen(target));或者找到将该信息提供给函数的其他方式。
希望这能有所帮助。
编辑:假设它是您实际需要的genome中的元素数量。
发布于 2011-11-27 07:08:29
数组是非常有限的。
更喜欢使用std::vector (或std::string)
std::string breedMutation(std::string const& genome)
{
std::string mutation;
return mutation;
}
int main()
{
std::string target = "Das weisse leid"; //dummy message
std::string mutation = breedMutation(target);
}https://stackoverflow.com/questions/8282221
复制相似问题