到目前为止,我已经阅读了有关结构的信息,无论是否有指针。我的问题是关于结构与类和主要结合的结构。我从K& R和c ++站点学到的是结构不能包含值。我想要分配给成员的值将是常量。在几篇文章中,我读到我应该将结构放在类中,甚至是私有内部。我使用的设置是:
class C
{
struct something {const float m = 3} s;` //actually 12 members. Compiler doesn't accept values: "ISO C++ forbids initialization of member"
function foo(struct something s){ float m = s.m; <..do something..>}` //struct s actually used in several functions
};
int main(){C c;}
然后我创建了两个结构,并让第二个赋值给第一个成员,我觉得很难看。但是为什么gcc会接受它?那么如何以正确的方式仅分配值一次,因为分配值必须在函数内完成。顺便说一下,我正在使用Ubuntu gcc-4.6.1。
感谢您的回答。
答案 0 :(得分:1)
C ++中struct
和class
之间的区别在于struct
默认其成员为public
,而类默认为private
(继承同样如此) )。这就是它的全部内容。
然后,在C ++ 03中const float m = 3;
无效作为成员声明。您需要为结构声明一个构造函数:
struct something
{
const float m;
const float n;
something() : m(3), n(42) {}
} s;
答案 1 :(得分:1)
struct something {const float m = 3} s;` //actually 12 members. Compiler doesn't accept values: "ISO C++ forbids initialization of member"
修复上面的事情
struct something {
something (float const& f = 3) : m(f)
const float m;
} s;
答案 2 :(得分:0)
C ++中的结构和类遇到了这个问题。如果变量是静态的并且在类的所有实例之间共享,则只能在类定义中声明值。如果您的变量是常量,我认为这可能是一个不错的选择。
非常量变量的一个很好的解决方案很简单 - 将所需的值分配给类或结构的默认构造函数中的所有变量。
e.g
struct Something
{
float value;
Something():value(5.0f) {};
}