cjwddxlb 2018-07-02 13:52 采纳率: 100%
浏览 771
已采纳

关于c++里静态变量的实例化

Leetcode上的题(所以请不要在class Solution外改),我想声明一个空指针(直接用nullptr没法用,说我auto推断类型错误)用static cube NullCube[9][9]; 在cube类里声明了。但是运行时显示NullCube没有实例化,在各处加上cube::NullCube都没法成功,不知道应该怎么修改?

#include <vector>
#include <iostream>

using std::vector;

class Solution {
    class cube{
    public:
        int value=-1;
        int avail[10] = {1,1,1,1,1,1,1,1,1,1}; //avail<=0 means not available
        int stillAvail=10;
        static cube NullCube[9][9];            /////////////////////////WHYYYYYY CAN'T I USE THIS POINTER????????
        static bool cube_put(int num,int x,int y,cube board[9][9]){
            board[x][y].value=num;
            int i,j;
            int flag = true;
            for(i=0;i<9;i++) {
                flag = flag && RmvPsb(num, i, y, board);
                flag = flag && RmvPsb(num, x, i, board);
                if (x == y) flag = flag && RmvPsb(num, i, i, board);
                if (x + y == 8) flag = flag && RmvPsb(num, i, 8 - 1, board);
            }
            return flag;
        };

        static bool RmvPsb(int num,int x,int y,cube board[9][9]){
            board[x][y].avail[num] -=1;
            if(board[x][y].avail[num]==0) board[x][y].stillAvail-=1;
            if(board[x][y].value == -1 && board[x][y].stillAvail<=0) return false;
            return true;
        }
        static bool locale0(cube board[9][9],int &x,int &y){
            for (int i = 0; i < 9; ++i) {
                for (int j = 0; j < 9; ++j) {
                    if(board[i][j].value==-1){
                        x=i;
                        y=j;
                        return true;
                    }
                }
            }
            std::cout<<"no more -1 now!";
            return false;
        }

        static auto search(cube board[9][9]){
            int x,y;
            if(!locale0(board,x,y)) return board;
            std::cout<<"searching for: \n";
            for(int i=0;i<9;i++){
                for(int j=0;j<9;j++){
                    std::cout<<board[i][j].value<<" ";
                }
                std::cout<<"\n";
            }
            for (int i = 0; i <= 9; ++i) {
                if(board[x][y].avail[i]==1){
                    cube board_[9][9];
                    for (int j = 0; j < 9; ++j) {
                        for (int k = 0; k < 9; ++k) {
                            board_[j][k]=board[j][k];
                        }
                    }//copy a new board
                    if(cube_put(i,x,y,board_)== false){
                        continue;
                    }
                    auto p=search(board_);
                    if(p!= NullCube) {std::cout<<"find it"<<p<<"\n";return p;}
                }
            }
            return NullCube;
        }
    };

public:
    void solveSudoku(vector<vector<char>>& board) {
        cube::NullCube;
        int i,j;
        cube b[9][9];
        for(i=0;i<9;i++){
            for(j=0;j<9;j++){
                if(board[i][j]!='.'){
                    cube::cube_put(int(board[i][j]-'0'),i,j,b);
                }
            }
        }
        cube::search(b);
    }
};

int main(){
    char s[9][9]= {{'5','3','.','.','7','.','.','.','.'},{'6','.','.','1','9','5','.','.','.'},{'.','9','8','.','.','.','.','6','.'},
    {'8','.','.','.','6','.','.','.','3'},{'4','.','.','8','.','3','.','.','1'},{'7','.','.','.','2','.','.','.','6'},
    {'.','6','.','.','.','.','2','8','.'},{'.','.','.','4','1','9','.','.','5'},{'.','.','.','.','8','.','.','7','9'}};

    vector<vector<char>> v(9,vector<char>(9));
    int i,j;
    for(i=0;i<9;i++){
        for(j=0;j<9;j++){
            v[i][j]=s[i][j];
        }
    }

    Solution c;
    c.solveSudoku(v);
    return 0;
}


  • 写回答

3条回答 默认 最新

  • zale_lzj 2018-07-04 03:57
    关注

    cube类内的静态成员变量,还需要在外边定义吧;不过类内的static静态成员变量可以在声明时立即初始化,不知道这样编译器会不会通过此段代码。

    建议修改数据结构呀,初略看了看代码,感觉可以用数组替代的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog