在函数周围传递char[]
passing char[] around functions
我正在尝试将一些重载函数链接在一起。这本应该很简单,但我却犯了错误。这是代码:
void output(char c[])
{
output(c, 0);
}
void output(char c[], int x)
{
int l = strlen(c) - x;
output(c, x, l);
}
void output(char c[], int x, int y)
{
cout << c;
}
int main()
{
output("myname");
output("myname", 3);
output("myname", 2, 4);
}
我得到的错误与链接的部分(output(c, 0);
和output(c, x, l);
)有关。错误为:
"No matching function for call to 'output (char *&, int)'
"No matching function for call to 'output (char *&, int &, int &)'
解释一下我做错了什么也不错。
我认为问题与您的函数缺乏原型这一事实有关。在这种情况下,您应该重新排序函数,以便您调用的函数出现在调用它们的函数之前:
void output(const char c[], int x, int y)
{
cout << c;
}
void output(const char c[], int x)
{
int l = strlen(c) - x;
output(c, x, l);
}
void output(const char c[])
{
output(c, 0);
}
但在定义所有函数之前,最好坚持使用原型。
还要注意,字符串文字是const
。由于函数不修改字符串文字的内容,因此应该声明const char c[]
而不是char c[]
。
您必须首先定义以后将要使用的所有函数。因此,在您的情况下,我建议先定义函数原型,然后再实现所有这些原型。我的意思是:
void output(char c[], int x);
void output(char c[], int x, int y);
void output(char c[])
{
output(c, 0);
}
void output(char c[], int x)
{
int l = strlen(c) - x;
output(c, x, l);
}
void output(char c[], int x, int y)
{
std::cout << c;
}
int main()
{
output("myname");
output("myname", 3);
output("myname", 2, 4);
}
C++要求首先声明您调用的所有函数。如果编译器没有在代码中的某个位置看到函数的声明(换句话说,它的原型),就无法调用函数。
因此,为了让它发挥作用,你应该首先声明所有的函数(换句话说,放置所有的原型),然后再调用它们:
// Declarations go first
void output(char [], int);
void output(char [], int, int);
void output(char c[])
{
output(c, 0);
}
void output(char c[], int x)
{
int l = strlen(c) - x;
output(c, x, l);
}
void output(char c[], int x, int y)
{
cout << c;
}
这样,编译器将在调用函数之前获得所有需要的原型。
相关文章:
- 将char*传递给pthread_read函数
- 为什么这个函数将"const char*"转换为"void* const"而不是"const void*"
- 从函数返回const char*数组
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 使用c#访问c++dll中带有char*参数的函数时发生AccessViolationException
- 将函数参数"const char*"转换为"std::string_view"是
- std::string 构造函数如何处理固定大小的 char[]?
- 在 constexpr 构造函数 (c++17) 中赋值到 const char * 在使用 Android NDK 时
- 构造函数 (C++) 中的 char 指针参数存在问题
- c ++ 如何在构造函数中初始化 char
- C++ 存储来自 char* 函数的字符列表
- 从循环返回char函数数据
- 预处理器检查 constexpr const char* 函数
- 如何使const char*函数起作用
- 返回一个带有随机选项和局部变量的 char 函数
- System::字符串到char*函数.内存泄漏
- 如何在c++中使用递归char *函数来反转字符串
- 如何在c++中创建一个char函数
- Windows与UTF-16一起使用char*函数
- c++在char函数中搜索char