用引用调用真实调用调用两个指针到C++中的字符
我试图用引用的real call替换const char上的两点。但我有问题用引用调用真实调用调用两个指针到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
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:这种情况经常发生。