1

これまでのところ、ポインターの有無にかかわらず、構造体について読みました。私の質問は、クラスとメインを組み合わせた構造体についてです。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;}

次に、2 つの構造体を作成し、2 番目に最初のメンバーに値を割り当てさせましたが、これは見苦しいと思います。しかし、なぜそれが gcc に受け入れられたのでしょうか? 値の割り当ては関数内で行う必要があるため、適切な方法で値を1回だけ割り当てるにはどうすればよいですか。ところで、Ubuntu gcc-4.6.1 を使用しています。

回答ありがとうございます。

4

3 に答える 3

1

C++ におけるstructとの違いは、 s がメンバーのデフォルトであるのに対して、クラスのデフォルトは(継承についても同じです) ことです。それだけです。classstructpublicprivate

次に、C++03 ではconst float m = 3;メンバー宣言として有効ではありません。構造体のコンストラクターを宣言する必要があります。

struct something
{
    const float m;
    const float n;
    something() : m(3), n(42) {}
} s;
于 2013-10-23T08:36:41.377 に答える
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;
于 2013-10-23T08:38:16.867 に答える