2010-06-11 55 views
7

我想定义一个结构,其中将存储一些数学常量。
这里是我现在得到:C++中的静态结构

struct consts { 
    //salt density kg/m3 
    static const double gamma; 
}; 

const double consts::gamma = 2350; 

它工作正常,但仍然会有超过10个浮点常量,所以我不希望他们每个人之前写了“静态常量”。并定义类似的东西:

static const struct consts { 
    //salt density kg/m3 
    double gamma; 
}; 

const double consts::gamma = 2350; 

它看起来不错,但我得到了这些错误:一个非静态数据成员可能不是它的类之外定义
1.成员函数重声明不允许
2.

我想知道是否有任何C++的方式来做到这一点?

+0

10根本不是很多。只需复制粘贴'static const double'部分即可。 – 2010-06-11 14:39:03

+1

我确信在代码中复制粘贴是最大的罪恶:) – Andrew 2010-06-11 14:43:30

+3

__logic__的复制粘贴是一个很大的罪恶。复制粘贴静态const double ...不是很多。如果你需要10个常量,你需要声明它们。 – jmucchiello 2010-06-11 14:50:09

回答

27

使用命名空间而不是尝试将结构变成命名空间。

namespace consts{ 
    const double gamma = 2350; 
} 

访问数据的方法也有完全相同的synatx。因此,例如:

double delta = 3 * consts::gamma; 
+0

对不起,我加盖了你的修改:( – 2010-06-11 14:39:01

+0

@大卫没问题,谢谢编辑。我几乎错过了我忘记在那里放置一个类型的事实 – Yacoby 2010-06-11 14:41:23

+0

谢谢,那正是我想要的:) – Andrew 2010-06-11 14:47:08

10

这听起来像你真的只想要一个命名空间:

namespace consts { 
    const double gamma = 2350.0; 
    // ... 
} 

除了我会试着拿出比consts它一个更好的名字。

+0

对编辑抱歉,我点击了错误的按钮。 – 2010-06-11 14:42:35