如何使用全局变量声明全局数组的长度?

时间:2015-04-04 16:51:13

标签: c++ arrays

我想用全局变量声明数组的长度。但我得到了错误,我很困惑解决这个问题。

int BARIS = 8;
//I get error when declare Squares Array with global variable (BARIS variable)
int SquaresInfo[BARIS];

int main(int argc, const char * argv[]) {
    cout << "\n\n\n\n\n\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t Tekan ENTER untuk masuk ke permainan";
    if(cin.get() == '\n' ) {
        system("clear");
        cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
        gameInterface();
    } else {
        cout << " ";
    }

    return 0;
}

enter image description here

声明SquareInfo数组的长度时出错。我很困惑如何使用全局变量声明数组长度

4 个答案:

答案 0 :(得分:2)

数组的大小应为常量表达式(大于0)。更改此声明

int BARIS = 8;

const int BARIS = 8;

C ++标准不允许使用可变长度数组(VLA),尽管某些编译器有自己的语言扩展允许使用VLA。而且VLA(s)应具有自动存储持续时间。也就是说,如果你被允许定义一个VLA,那么它应该是一个本地数组

允许VLA的C标准(6.7.6.2数组声明符)

  
      
  1. ...如果标识符被声明为具有静态或线程存储持续时间的对象,它不应具有可变长度数组   型即可。
  2.   

如果变量可能不是常数,则使用std::vector<int>而不是数组。例如

#include <vector>

//...

int BARIS = 8;
std::vector<int> SquaresInfo( BARIS );

答案 1 :(得分:2)

除了其他答案可能指出c风格数组定义的解决方案(你需要一个constexpr可用于在编译时指定数组大小),我想鼓励使用{{ 3}}由现行标准提出:

std::array<int,8> SquaresInfo;

可以使用其他地方的std::array<>函数获取当前大小。

访问某些索引将被边界检查,并且它提供了更多类型的行为(例如,自动复制沿赋值操作),而不是c风格的数组。

答案 2 :(得分:0)

只需在主函数中移动数组定义和/或声明BARIS const

答案 3 :(得分:0)

您不能拥有变量数组索引,请尝试

#define BARIS 8
int squareInfo[BARIS];