Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用引用调用真实调用调用两个指针到C++中的字符_C++ - Fatal编程技术网

用引用调用真实调用调用两个指针到C++中的字符

用引用调用真实调用调用两个指针到C++中的字符,c++,C++,我试图用引用的real call替换const char上的两点。但我有问题 void swap(const char *&str1, const char *&str2) { //swap char pointers const char *one = str1; str1 = str2; str2 = one; } int main(void){ const char *str1 = "Apple"; const char *str2

我试图用引用的real call替换const char上的两点。但我有问题

void swap(const char *&str1, const char *&str2) { //swap char pointers
    const char *one = str1;
    str1 = str2;
    str2 = one;
}

int main(void){
    const char *str1 = "Apple";
    const char *str2 = "Potato";
    swap(*str1, *str2);
    return 0.0;
}
我不断发现这个错误:

从“char”到“const char”的转换无效


调用swap时,不应该取消对指针的引用。您需要拨打:

swap(str1, str2);
或者,更好的方法是使用

此外,如果您试图运行您编写的代码,您需要交换原型或交换函数:

void swap(const char *&str1, const char *&str2) 
{ 
  const char *one = str1;
  str1 = str2;
  str2 = one;
}    

int main(void)
{
  const char *str1 = "Apple";
  const char *str2 = "Potato";
  swap(str1, str2);

  return 0;
}
此外,main返回一个int,而不是float,您通常应该在以下位置使用它,而不是const char*:

std::string str1 = "Apple";
std::string str2 = "Potato";
当然,std::swap算法仍然可以正常工作

<>和最后,在C++中,主元素和返回元素0的参数列表都不缺省。 以下是根据上述建议重新审查的代码:

#include <algorithm>
#include <string>
#include <iostream>

int main() {
    std::string str1 = "Apple";
    std::string str2 = "Potato";
    std::swap(str1, str2);
}
但问题是,为什么要复制std::swap的代码?这是一个反问句,如果您想知道是否要将其标记为不是答案,那么您在调用swap之后定义了swap。在C++中,函数在调用之前应该被定义。将交换的定义移动到文件顶部,在main上方。然后将出现以下错误:

test.cpp:11: warning: converting to ‘int’ from ‘double’
test.cpp: In function ‘int main()’:
test.cpp:10: error: invalid initialization of reference of type ‘const char*&’ from expression of type ‘const char’
test.cpp:1: error: in passing argument 1 of ‘void swap(const char*&, const char*&)’
您的主函数应该返回0一个int,而不是0.0一个double

修复此问题后,您将最终得到以下错误:

test.cpp:11: warning: converting to ‘int’ from ‘double’
test.cpp: In function ‘int main()’:
test.cpp:10: error: invalid initialization of reference of type ‘const char*&’ from expression of type ‘const char’
test.cpp:1: error: in passing argument 1 of ‘void swap(const char*&, const char*&)’
这是因为您正在取消对swap的参数引用。删除*后,程序现在可以正常工作


但是,您只需完全删除swap函数,包括并使用std::swap。

仍然可以得到相同的结果error@user2678614:不,您不需要。返回0.0;是合法的,但很疯狂。我改了,谢谢。但我仍然有同样的问题,也只是使用std::swap-in,而不是编写自己的swap函数。这就是它的目的。这是用来做交换函数的赋值,所以我不能直接做。你能帮我纠正你看到的任何错误吗?@user2678614-我已经补充了答案,非常感谢。现在一切都好了:关于main的浮动返回,我错把它放在这里了。我在调用swap时删除了“*”,并按照您的建议编辑了函数内容,效果非常好:现在这是一个新功能。谁会说我不能创建自己的函数,如果它的函数等价物已经存在于某个库中?反正也不能回答原来的问题。@Cthulhu:所有专家。这一点都不新鲜。@Cthulhu,谁写的有什么区别?@Cthulhu:你不应该这样做,因为设计和实现stdlib的人可能比你聪明得多,花在上面的时间比你花得起的多,为什么要浪费你自己的时间复制他们的工作呢?@Cthulhu:这种情况经常发生。