0

2 つのプライベート int を含むクラスがあります。1 つは const (m_id) で、もう 1 つは static (next_id) です。

m_id を next_id に設定し、クラスのオブジェクトを作成するたびに next_id をインクリメントしたいと考えています。

しかし、それはconstなので、そのように設定することはできません:

Class::Class() 
{
m_id = next_id++;
}

そのように設定する必要があります

Class::Class() :m_id(next_id)
{
next_id++;
}

しかし、そのようなプライベート静的にアクセスできないため、それも良くありません。

const はそのために使用することを意図していないので、単純に削除すると誰かが私に言いました。それが本当に唯一の解決策ですか?

編集:ここに完全なヘッダーとソース

ヘッダ

#ifndef ENTITY_H_LEA12OED
#define ENTITY_H_LEA12OED

#include "EntityKey.h"
#include "ComponentManager.h"
class Entity
{
public:
    Entity ();
    virtual ~Entity ();

private:
    ekey m_key; 
    ComponentManager m_componentManager;
    const int m_id;
    static int next_id;
};

#endif /* end of include guard: ENTITY_H_LEA12OED */

ソース

#include "Entity.h"

Entity::Entity() :m_id(next_id++)
{

}

Entity::~Entity()
{
}   

(もちろん EntityKey と ComponentManager は私の質問とは何の関係もありません)

(編集2:テストによるコードのいくつかのエラーを修正しました)

4

1 に答える 1

2

を定義する必要があります。next_idそうしないとコンパイルされますが、リンクはされません。そのようです:

class Class
{
    /* whatever */
};

Class::Class() :m_id(next_id++)
{
    /* whatever */
}

int Class::next_id = 0;
于 2013-07-25T12:44:08.097 に答える