如何访问头文件中定义的常量?

时间:2014-05-26 07:32:00

标签: c++

以下是我的.h

#ifndef GRID_H_
#define GRID_H_

#include <array>


namespace game{

class Grid{
public:
    static const int dimension = 10;
    std::array<int, dimension*dimension> grid;

    Grid();

    int get_cell(int x, int y);



};

} 

#endif /* GRID_H_ */

以下是我的.cpp

#include "Grid.h"

namespace game {

Grid::Grid() {
    // TODO Auto-generated constructor stub
}


int get_cell(int i, int j){
    return (std::get<(i*dimension+j)>grid);
}
} 

编译说:

错误:'dimension' was not declared in this scope

我尝试添加范围解析操作员游戏::,但它没有用。如何从头文件中访问此常量?

它不应该是一个全局公共变量吗?!包含应该从头文件中复制并粘贴代码。我不明白什么是错的。对不起基本问题;我是C ++ /

的新手

2 个答案:

答案 0 :(得分:2)

您必须使用班级名称来访问static成员:

int Grid::get_cell(int i, int j){
  return (std::get<(i* Grid::dimension +j)>grid);
}

注意: ::运算符引用全局范围。但是dimension属于班级范围,而不是全局范围。

您对std::get的使用是错误的。它应该是

 return (std::get< /*a constant value*/>(grid)); // 

答案 1 :(得分:2)

int get_cell(int i, int j){
    return (std::get<(i*dimension+j)>grid);
}

这定义了一个全局函数,您可以直接引用dimension

 int get_cell(int i, int j){
    return (std::get<(i* Grid::dimension+j) > grid);
 //                      ^^^^^^
}

您应该将get_cell定义为Grid

的成员
int Grid::get_cell(int i, int j){
//  ^^^^
    return (std::get<(i*dimension+j)>grid);
}