错误C2109:下标需要数组或指针类型

时间:2010-05-13 20:13:19

标签: c++ visual-studio-2008

我正在尝试调试一些功课,但我遇到了这些代码行的问题

#include "stdafx.h"
#include<conio.h>
#include<iostream>
#include<string>
using namespace std;

int main()
{
   char word;
   cout << "Enter a word and I will tell you whether it is" << endl <<
 "in the first or last half of the alphabet." << endl << 
   "Please begin the word with a lowercase letter. --> ";
   cin >> word;
   if(word[0] >= 'm')
     cout << word << " is in the first half of the alphabet" << endl;
   else
     cout << word << " is in the last half of the alphabet" << endl;
   return 0;
}  

我收到以下错误,我不知道它的含义是什么

error C2109: subscript requires array or pointer type

4 个答案:

答案 0 :(得分:6)

术语下标指的是[]运算符的应用。在word[0]中,[0]部分是下标。

内置[]运算符只能与数组或指针一起使用。您正尝试将其与char类型的对象一起使用(您的word声明为char),它既不是数组也不是指针。这就是编译器告诉你的。

答案 1 :(得分:1)

而不是

char word;

声明

string word;

您已经包含了字符串类标头。然后,您可以使用[] -operator访问元素。

补充说明:为什么使用conio.h?它已经过时,不属于C ++标准。

答案 2 :(得分:1)

另一个建议:将输出文本声明为一个实体,然后阻止写入。这可以使您的程序更容易调试,阅读和理解。

int main(void)
{
    static const char prompt[] =
    "Enter a word and I will tell you whether it is\n"
    "in the first or last half of the alphabet.\n"
    "Please begin the word with a lowercase letter. --> ";

   string word;
   cout.write(prompt, sizeof(prompt) - sizeof('\0'));

   getline(cin, word);

   cout << word;
   cout << "is in the ";
   if(word[0] >= 'm')
     cout "first";
   else
     cout << "last";

   cout << " half of the alphabet\n";
   return 0;
}

供您参考(FYI):

  1. stdafx.h不是标准标头 而不是小项目所必需的。
  2. conio.h不是标准标头 并不是简单的控制台所必需的 I / O。
  3. 首选string代替文字 char *

答案 3 :(得分:0)

单词被声明为char,而不是数组。但是你正在使用word[0]