如何在另一个类构造函数中使用一个类的成员

How to use member of one class in another class constructor

本文关键字:一个 成员 另一个 构造函数      更新时间:2023-10-16

我有一个类:

class Cave 
{
private:
    int no_of_rooms;
public:
    vector<int>rooms;
    Cave(int r);
    Cave(){};
};

Cave 的构造函数用随机整数填充向量房间:

Cave::Cave(int r)
    :no_of_rooms{ r }
{
    int i = 0;
    while (i<no_of_rooms)
    {
        rooms.push_back(randint(1, no_of_rooms));
        ++i;
    }   
}

我创建另一个类:

class Player : public Cave
{
public:
    Player(int *plyr) 
        :p_ptr{ plyr }
    { 
        plyr = &rooms[0];
    }
private:
    int* p_ptr = nullptr;
};

这个玩家类似乎一团糟。我正在尝试访问由 Cave 构造函数填充的相同房间矢量。

我认为你真的应该封装 Cave 而不是从它继承。试试这个。

洞穴

#include <vector>
#include <random>
class Cave 
{
private:
    int no_of_rooms;
public:
    std::vector<int>rooms;
    Cave(int r);
    Cave(){};
};
inline int randint(int min, int max) 
{
    std::random_device device;
    std::mt19937 engine(device());
    std::uniform_int_distribution<int> dist(min, max);
    return dist(engine);
}

洞穴.cpp

#include "cave.h"
Cave::Cave(int r)
    :no_of_rooms{ r }
{
    int i = 0;
    while (i<no_of_rooms)
    {
        rooms.push_back(randint(1, no_of_rooms));
        ++i;
    }   
}

玩家.h

#include "cave.h"
class Player// : public Cave
{
public:
    Player(int *plyr) 
        :p_ptr{ plyr }
    { 
        cave = Cave(*plyr);
        plyr = &cave.rooms[0];
    }
private:
    Cave cave;
    int* p_ptr = nullptr;
};

我试过用

#include "player.h"
int main(int argc, char* argv[])
{
    int player_count = 2;
    Player p(&player_count);
}

另外,我不确定在某些代码中是否不必要地使用指针。

你可能有一个错别字:

plyr = &rooms[0];

这将设置函数参数,而不是成员。

你是说p_ptr = &rooms[0];

但是为什么要有一个函数参数。这是没有道理的。

不幸的是,你没有告诉我们你想做什么,或者你想让这些类做什么,或者你需要向类提供什么输入。所以我不能进一步回答。