以下是我的.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 ++ /
的新手答案 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);
}