【发布时间】:2021-09-10 13:14:07
【问题描述】:
我正在尝试使用指针(因为我需要它们),但由于某种原因,我不理解它们。 (解释在代码截图下)
void Spiel::SetFigureToField(Figur *figur)
{
*figur->teampos = *figur->*spieler->GiveTeamPos();
figur->teampos = figur->spieler->GiveTeamPos();
figur->pos = figur->teampos;
this->spielfeld[figur->Startpoint].Figuren.push_back(figur);
std::vector<Figur*>* figs = &figur->spieler->SpawnField;
for (int i = 0; i < figs.size(); i++) //find figure in spawnfield and erase it
{
if (*figs[i] == figur)
{
*figs.erase(*figs.begin() + i);
}
}
}
struct Figur
{
Spieler* spieler{};
int Startpoint{}; //startpoint on spielfeld
int teampos{0}; //pos in Array | 0 best - 4 worst | 5 spawnfield
int pos{};
int id{};
void reset(int team, int pos)
{
if (team == 0) this->Startpoint = 0;
else this->Startpoint = 21;
teampos = pos;
}
};
class Spieler
{
public:
Spieler(std::string wuerfelS, int team);
//Stats
int Wins{ 0 };
int AnzahlWuerfen{ 0 };
//for game
int FigursActive{ 0 }; //keepstrack of the figurs on field
Wuerfel wuerfel{};
std::vector<Figur>figuren{};
std::vector<Figur*>SpawnField{};
Figur* ZielFeldArray[4];
int GiveTeamPos();
};
好的,第一个函数是我的问题点。
解释它应该如何工作:所以一个Figur(指针)在函数中被传递,它应该被放置到一个gamefield。
我的理解:我想编辑figur 中的teampos。所以我学到的是我应该取消引用它(所以我从内存地址中获取值),但如果我这样做 *figur->teampos 它只会给我一个错误。
另一个:
std::vector<Figur*>* figs = &figur->spieler->SpawnField;
有了这个我应该得到SpawnField向量的指针。我的想法是我必须取消引用它才能使用向量的值和方法。 *figs.size()这是我尝试过的,但它给出了一个错误。
很明显,我不懂指针,但每个教程都说:如果你有一个指针,你必须取消对它的引用才能访问值(好吧是有道理的),但它不起作用
【问题讨论】:
-
无论“某种原因”是什么,它都很常见。几乎每个人都遇到了指针问题,至少在开始时是这样。
-
我正在尝试做指针(因为我需要它们), -- 但是你把它发挥到了极致,试图做一些不必是指针的东西变成指针。
-
而
->*是一个“取消引用指向成员的指针”运算符,指向成员的指针与指向成员变量的指针不同。 (有趣,不是吗,这个 C++ 的东西?) -
您需要备份一个步骤。你说你“不懂指针”,然后说“我正在尝试做指针(因为我需要它们)”。了解指针是能够确定是否需要使用它们的先决条件。此外,您正试图用您不理解的事情向我们解释您试图做的事情……这很可能使您的问题描述对您以外的任何人都是胡言乱语。相反,专注于理解指针(任何关于 C++ 的基本文本都会对此有所帮助)。
-
要么等待答案(并且可能)接受它,要么写一个全面的答案来帮助其他初学者理解你的问题。