字符串数组,我该如何使用它?履行

时间:2010-11-19 12:56:37

标签: c++ arrays string multidimensional-array

所以,我正在编写控制台游戏作为我在C ++上的第一个项目,我想要做的是实现look函数。这是它的作用:

获取当前坐标 从2d字符串数组中读取描述 cout描述

但我不能让那个2d字符串数组起作用。

  string zoneid[100][100];
    zoneid[1][1] = "text";
    cout << "You see " << zoneid[1][1] << endl;

它在第一行的'='标记之前给出了错误 - 预期的构造函数,析构函数或类型转换。我尝试用括号,花括号,仍然没有帮助。 谷歌搜索也没有多大帮助。

更新:这里是完整的代码,但错误仅在行zoneid [1] [1] =“text”;

    #include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <stdlib.h>
#include "genlib.h"
#include "strutils.h"
#include <time.h>
#include <string>

int inventory_array[49];

int coordsX;
int coordsY;
std::string zoneid[100][100];
zoneid[1][1] = "Text";


void init_inv()
{
    for (int i=0; i < 50; i++) {
        inventory_array[i] = 0;
    }

}

void introduce() {
    cout << "Welcome to Diablo 2! "
         << endl;
}

void inventory() {

    cout << endl << "Your inventory:" << endl;
    for (int i = 0; i < 50; i++) {
        if (inventory_array[i] != 0) {
            cout << i << ". " << "something" << endl;

        }

    }

}

int itemRoll()
{

    int item_id = 0;
    item_id = (rand() % 1000);
    return item_id;

}



void look(int x, int y)
{
    cout << "You see " << zoneid[1][1] << endl;

}
























void inputController()
{
    while (true) {
        cout << "Please enter command!" << endl;
        string command;
        getline(cin, command);


        if (command == "inv") {
            inventory();
        }


        if (command == "look") {
            look(coordsX, coordsY);
        }





        if (command == "roll") {
            for (int i=0; i < 50; i++) {
                cout << itemRoll() << endl;
            }
            cout << itemRoll() << endl;
        }



        if (command == "kill") {
                cout << "KILL COMMAND ACTIVATED" << endl;
            }


                if (command == "quit") {

                    cout << "FAILED TO INTERPRET" << endl;
                    break;


                } 



            }


    }


    void ending()
    {
        cout << "Thanks for playing Diablo 2";
    }



int main(int argc, char ** argv) {
    srand(time(NULL));
    introduce();
    init_inv();
    coordsX = 1;
    coordsY = 1;                
    inputController();
    ending();
    return 0;
}

6 个答案:

答案 0 :(得分:5)

您的定义不起作用,因为您可以在函数体中为声明它的同一行中的全局变量 指定一个值。

所以:

int a;
a = 5; // Error

int b = 5; // OK, definition in same line as declaration

int c;

int main()
{
   c = 5; // OK, definition within a function body.
}

答案 1 :(得分:3)

好的,这就是问题所在:

int inventory_array[49];

int coordsX;
int coordsY;
std::string zoneid[100][100];
zoneid[1][1] = "Text";

此代码位于文件范围内。也就是说,它不是一个功能。但zoneid[1][1] = "Text"是可执行代码 - 它需要在函数中。

您可以将初始化程序放在main()

int main()
{
  zoneid[1][1] = "Text";
  // ...
}

答案 2 :(得分:1)

您无法像在函数外部那样初始化数组。你可以这样做:

string zoneid[][] = { {"text"} };

但对于大小为100 * 100的数组执行此操作是不切实际的。因此,最好将初始化移至main的开头。

答案 3 :(得分:0)

编辑:(根据您的更新)

您无法在全局范围中指定字符串值。您只能声明全局变量。顺便说一句,声明全局变量通常被认为是bad practice anyway

答案 4 :(得分:0)

您必须包含字符串标题

#include <string>

答案 5 :(得分:0)

在C ++中,不允许在函数外部使用可执行语句(例​​如zoneid[1][1] = "Text";)。

如果你在一个函数中移动该赋值(例如,到main的最开头),那么它应该工作得更好(但我没有检查其余的代码是否有错误)。