出于某种原因,我似乎无法做到这一点 好吧,我有2个对象
class score
{
public:
int scored(int amount);
private:
int currentscore;
}
int score::scored(int amount)
{
currentscore += amount;
return 0;
}
class collisions
{
public:
int lasers();
}
// ok heres my issue
int collisions::lasers()
{
// some code here for detection
// I need to somehow call score.scored(100);
score.scored(100); // not working
score::scored(100); // not working
// how do i do that?
}
collisions collisions;
score score;
int main()
{
while (true)
{
// main loop code here..
}
return 0;
}
答案 0 :(得分:1)
这是你的问题:
collisions collisions;
score score;
您不应声明与其类型同名的变量。使类型大写,一切都应该适合你。另外,不要忘记将这两个变量的定义移到它们正在使用的函数之上。
答案 1 :(得分:1)
您创建了一个全局变量score
,您显然希望collisions::lasers
更新。这通常是一个坏主意,但我不会在这里讨论。
问题是你在score
的定义之后声明了collisions::lasers
变量,所以它无法访问变量。重新排列代码或将extern
score
声明放在顶部附近。
答案 2 :(得分:0)
我觉得你需要一个score
成员变量,比如说score_
,在collisions
类中,这样就可以了
int collisions::lasers()
{
// some code here for detection
// i need to somehow call score.scored(100);
// score.scored(100); // not working
// score::scored(100); // not working
// how do i do that?
score_.scored( 100 );
}
编辑1
澄清score_
class collisions {
private:
score score_;
};
答案 3 :(得分:0)
两个问题。
正如其他人所指出的,类名与变量相同。我不太确定你能做到这一点,或者它甚至会编译。我的编译器肯定不喜欢它。
我建议你为你的课程命名,就像课堂上每个单词的大写起始字母和大写字母一样。所有其他字母小写。例如碰撞&得分了。或CompactDisk等。
第二个问题是碰撞并不了解您已全局声明的变量得分。
您需要做的是更改碰撞构造函数以获取这样的得分参考变量:
class collisions
{
public:
collisions(score &score);
int lasers();
protected:
score& score_;
}
collisions(score& score)
: score_(score) { }
现在激光应该引用得分成员变量
score_.scored(100);
你需要像这样更改全局变量:
score the_score;
collisions the_collisions(the_score);
当然,假设您只想要一份得分。如果你想要每个碰撞类的一个得分副本,那么你将没有得分全局变量,只需删除'&'即可。从成员变量score_中删除带引用的构造函数。
顺便说一句。
score.scored(100); // wrong... doesn't know anything about score, not in scope yet.
score::scored(100); // wrong. scored member isn't declared as static.