作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试使用两个类的变量来访问 A 类的变量和 B 类的变量,反之亦然。但是,我想不出一个可能的解决方案。它总是以循环或以下错误结束:
error: invalid use of non-static data member
这是代码示例:
播放器.h:
#ifndef _PLAYER_H_
#define _PLAYER_H_
#include "Segment/Dynamic_Segment.h"
class Attributes_P;
class Attributes_P : public Attributes_DS{
protected:
int inv_mcols, inv_mrows;
public:
Attributes_P();
void controls( int MKEY_UP, int MKEY_RIGHT, int MKEY_DOWN, int MKEY_LEFT );
void inventory( int inv_mcols, int inv_mrows );
};
class Player : public Dynamic_Segment{
protected:
int **inv;
public:
int MKEY_UP, MKEY_RIGHT, MKEY_DOWN, MKEY_LEFT;
public:
Player();
Attributes_P set;
friend class Core;
friend class Attributes_P;
};
#endif
播放器.cpp:
#include "Segment/Player.h"
Attributes_P::Attributes_P(){};
Player::Player() : Dynamic_Segment(){
set.inv_mcols = 0;
set.inv_mrows = 0;
}
void Attributes_P::inventory( int inv_mcols, int inv_mrows ) {
this->inv_mcols = inv_mcols;
this->inv_mrows = inv_mrows;
Player::inv = new int*[this->inv_mcols]; //<--- Error here
for( int i = 0; i < this->inv_mrows; i++ ) {
Player::inv[i] = new int[this->inv_mcols]; //<--- Error here
}
}
void Attributes_P::controls( int MKEY_UP, int MKEY_RIGHT, int MKEY_DOWN, int MKEY_LEFT ) {
Player::MKEY_UP = MKEY_UP; //<--- Error here
Player::MKEY_RIGHT = MKEY_RIGHT; //<--- Error here
Player::MKEY_DOWN = MKEY_DOWN; //<--- Error here
Player::MKEY_LEFT = MKEY_LEFT; //<--- Error here
}
一段时间以来我一直在用头撞墙......任何想法将不胜感激!
最佳答案
成员
Player::MKEY_UP
Player::MKEY_RIGHT
Player::MKEY_DOWN
Player::MKEY_LEFT
不是static
,因此您只能通过Player
类型的对象访问它们,而不能通过类实例。
假设您创建了 2 个播放器对象,p1
和 p2
。当您调用 Attributes_P::controls
时,您应该更改两个对象的哪个成员? p1
还是 p2
?
如果您希望它们在 Player
对象之间共享,您可以将这些成员声明为 static
,或者将特定的 Player
对象作为参数并直接访问其成员。这是逻辑的一部分,选择取决于您希望程序如何工作。
关于C++ 类纠缠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14281429/
我在 Pester 中有以下简单的测试: # Name.Tests.ps1 $name = "foo" Describe "Check name" { It "should have the co
我们正在尝试检查 CmdLet Start-ScheduledTask 是否已为特定计划任务准确调用一次。但由于某种原因,ParameterFilter 不匹配。 代码 $here = Split-P
我正在使用 pester 来测试我抛出的异常(负面测试)。 尽管看起来抛出的异常消息与我的Should -Throw 完全匹配,但当异常消息中有方括号时,Pester 会声明测试失败。通过从抛出的异常
我是一名优秀的程序员,十分优秀!