1

我可能已经有点习惯 Java 并且发现这比它应该的更难。这就是我所拥有的。

myObject[0] = new item1(this);

class item1
{
private:
    int x;
    int y;

public:    
    item1( passedPointer* pOne )
    {
        x = 5;
        y = 5;
    }

    int returnX() { return x; }

    int returnY() { return y; }
}

然后在另一种方法中,我想我可以说:

void check()
{
    int y = item1.returnY();
    int x = item1.returnX();            
}

但我遇到了一个常见错误:非静态成员引用必须相对于特定对象。

这个类 item1 只有一个实例,最好的方法是什么?这只是我实际正在做的事情的简化片段,而不是实际代码。

4

4 回答 4

3

Item1 是一个类。您必须先创建它的实例,然后才能访问其非静态成员。尝试在此处查找一些基本信息。

于 2012-04-24T15:28:32.423 回答
3
void check(){
   int y = item1.returnY;
   int x = item1.returnX;  
}

这在 Java 中也是不正确的,因为静态returnX也不returnY是,你需要一个对象来应用操作,你还需要方法调用的括号:

void check() {
   item1 i;
   int y = i.returnY();
   int x = i.returnX();
}
于 2012-04-24T15:29:37.713 回答
3

也许实现单例模式不会对您造成伤害,因为您只需要一个对象实例。您也可以将对象声明为函数的全局或静态对象,然后获取值。

再一次,您也可以将函数声明为静态函数,并添加另一个函数来初始化这些方法需要返回的变量的静态值。根据您的情况,有很多解决方案无法通过您粘贴的少量代码完全掌握。

于 2012-04-24T15:34:38.793 回答
2

您使用以下行创建了 item1 类的实例

myObject[0] = new item1(this);

与 JAVA 不同,在 C++ 中有指针,new 返回指向对象的指针(因此 myObject[0] 是指向实例的指针),因此您需要 -> 运算符。要激活您应该编写的方法:

myObject[0]->returnX();

如果您希望只有一个实例而不是将类实现为单例。

于 2012-04-24T15:36:19.637 回答