我正在制作一个C ++程序,并且有一个不断出现的警告(我正在使用g ++):
warning: pointer to a function used in arithmetic [Wpointer-arith]
我想知道:这条警告信息究竟是什么意思?什么是我的编译器试图告诉我问题是(一般而言)所以我可以更好地理解我做错了什么?
Google搜索针对人们代码中的特定问题提供特定解决方案,但从未告诉我此警告消息的确切内容。
我正在学习数组,我正在尝试制作一个打印“Hello,world!”的程序。一次只有一个字符,每个字符单独存储在一个数组中,然后在for循环中输入cout。
以下是代码:
#include <iostream>
using namespace std;
int ARRAY_ELEMENTS = 14;
void greeting()
{
char greeting[ARRAY_ELEMENTS];
greeting[0] = 'H';
greeting[1] = 'e';
greeting[2] = 'l';
greeting[3] = 'l';
greeting[4] = 'o';
greeting[5] = ',';
greeting[6] = ' ';
greeting[7] = 'w';
greeting[8] = 'o';
greeting[9] = 'r';
greeting[10] = 'l';
greeting[11] = 'd';
greeting[12] = '!';
greeting[13] = '\0';
}
int main(int argc, char* argv[])
{
greeting();
for (ARRAY_ELEMENTS = 0;
ARRAY_ELEMENTS <= 13;
ARRAY_ELEMENTS++)
{
cout << greeting[ARRAY_ELEMENTS] << endl;
}
return 0;
}
感谢您的时间。
答案 0 :(得分:6)
在这一行:
cout << greeting[ARRAY_ELEMENTS] << endl;
您指的是名为greeting
的函数,您将其视为数组。
答案 1 :(得分:5)
问候语是一个函数,但是您尝试将其打印出来,就像它是一个char数组一样。函数greeting()包含一个相同名称的char数组,这对代码的清晰度没有帮助 - 这可能是你感到困惑的地方。如果你给出不同的名字,那就更明显是出了什么问题。
你需要让你的greeting()函数返回一些东西,而不是只填写一个本地数组,这个数组不能从函数外部访问(并且无论如何都会在函数返回后立即丢弃)。
答案 2 :(得分:2)
声明greeting[ARRAY_ELEMENTS]
不符合您的想法。
从main
内部,名称greeting
引用功能void greeting()
。您似乎正在尝试打印char greeting[ARRAY_ELEMENTS]
变量。但是您无法从main
执行此操作,因为该名称仅在void greeting()
内可见。
你应该重命名函数或变量,以确保不再发生这种混淆,除此之外,你还有两个选择:在函数greeting
内部循环,或者将指针传递给缓冲区必须将问候语设置到功能中。这可能比你现在的水平要先进一点,但你最终必须学会如何做到这一点,所以没有时间像现在这样。
const int ARRAY_ELEMENTS = 14;
void make_greeting(char *greeting)
{
greeting[0] = 'H';
greeting[1] = 'e';
...
}
int main(int argc, char **argv)
{
char buffer[ARRAY_ELEMENTS];
make_greeting(buffer);
std::cout << "The greeting is \"" << buffer << "\"" << std::endl;
for(int i = 0; i != ARRAY_ELEMENTS; i++)
std::cout << "At position " << i << ": '" << buffer[i] << "'" << std::endl;
}
当然,你应该只是使用std :: string而不是字符缓冲区。
答案 3 :(得分:0)
我认为这里的问题是这段代码
greeting[ARRAY_ELEMENTS]
不符合您的想法。这会尝试索引函数ARRAY_ELEMENTS
的位置greeting
,这不是函数。你得到的错误是由编译器认为你试图将greeting
视为一个数组引起的,这不是你想要做的。
对此没有直接的解决方法,但您可以考虑执行以下操作之一:
greeting
更改为实际上是一个数组。greeting
成为一个接收索引并生成相应数组值的函数。希望这有帮助!