相关疑难解决方法(0)

为什么我不能在类中有一个非整数的静态const成员?

我注意到C++不会编译以下内容:

class No_Good {
  static double const d = 1.0;
};
Run Code Online (Sandbox Code Playgroud)

但是,它会愉快地允许将double更改为int,unsigned或任何整数类型的变体:

class Happy_Times {
  static unsigned const u = 1;
};
Run Code Online (Sandbox Code Playgroud)

我的解决方案是将其改为:

class Now_Good {
  static double d() { return 1.0; }
};
Run Code Online (Sandbox Code Playgroud)

并认为编译器将足够智能以在必要时内联...但它让我很好奇.

为什么C++设计器允许我使用静态const一个int或unsigned,而不是一个double?

编辑:我在Windows XP上使用visual studio 7.1(.net 2003).

EDIT2:

问题已得到解答,但为了完成,我看到的错误:

error C2864: 'd' : only const static integral data members can be initialized inside a class or struct
Run Code Online (Sandbox Code Playgroud)

c++

70
推荐指数
3
解决办法
4万
查看次数

静态const(非整数)成员初始化语法背后的基本原理?

我知道如何初始化一个不是整数的静态成员,但我想知道,这个语法背后的基本原理是什么?我希望能够将值放在类中,就像你可以使用整数成员一样,la:

class A {
  static const int i = 3;
};
Run Code Online (Sandbox Code Playgroud)

我意识到这可能意味着更多的重建,如果我改变了值,因为它是标题的变化 - 但在某些情况下这是非常不可能的 - 并且就像改变标题中的#define一样糟糕.

对于编译器来说,它似乎并不是一件非常难以理解的东西.是否有技术原因,它的工作方式如何?或者仅仅是编译器执行将实现与定义分离的良好实践的情况?

c++ syntax

3
推荐指数
1
解决办法
272
查看次数

初始化多维数组

当我尝试初始化多维数组时,我收到以下错误:

(20) : error C2059: syntax error : '{'
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

/*
 *      Tic-Tac-Toe
 *      Version 1.0
 *      Copyright (C) 2010 lolraccoon. All rights reserved.
*/
#ifndef GAME_H
#define GAME_H

#include <iostream>
using namespace std;

class Game
{
private:
    /*
     *      0 = NONE
     *      1 = HUMAN
     *      2 = COMPUTER
    */
    int board[3][3] = {0};
    char pieces[3] = {' ','X','O'};
public:
    void dispBoard();
};

#endif
Run Code Online (Sandbox Code Playgroud)

c++

2
推荐指数
1
解决办法
1498
查看次数

标签 统计

c++ ×3

syntax ×1