一个类的方法不能访问同一个类的int变量

时间:2014-04-23 08:51:35

标签: c++

注意:请停止downvoting ...我尝试了很多,但这只是一个我无法找到的错字。

我有一个类Node,它有一些方法和变量。我正尝试从两种方法(int statevoid setState()访问变量int getState(void)。第一种方法可以设置state的值,但第二种方法(即int getState(void))会出错。

Node.h

class Node{
private:
    vector<Wire*> inputs;       
    vector<Wire*> outputs;      
    int state;                  

public:

    void addOutput(Wire *a);                
    void addInput(Wire *a);             


    Node* getInput(unsigned int i);     
    Node* getOutput(unsigned int i);        

    void setState(int st);              
    int  getState(void);            


};

main()

int main(int argc, char *argv[])
{
    Node* b=new Node(INPUT, "B");
    Node* a=new Node(INPUT, "A");
    Node* Cin=new Node(INPUT, "Cin");
    Node* d=new Node(XOR, "D");
    Wire* w=new Wire(a,d);
    d->addInput(w);
    a->addOutput(w);

    vector<Node*> inputs;
    vector<Node*> outputs;

    for(int i=0;i<5;i++) {
        for(unsigned int j=0;j<inputs.size();j++) {
            inputs[j]->setState(rand()%2);
            cout << inputs[j]->getState(); // THIS LINE IS GIVING THE ERROR
        }

    }
    return 0;

}

node.cpp

void Node::addInput(Wire *a)
{
    inputs.push_back(a);
}

void Node::addOutput(Wire *a)
{
    outputs.push_back(a);
}

string Node::getName()
{
    return name;
}

void Node::setState(int st)         
{
    state = st;

    cout<<"\nState set to: "<<state;
}
int  getState(void)
{
    //return 0;
    return state;

}

错误:错误:未在此范围内声明“州”

4 个答案:

答案 0 :(得分:5)

一个简单的拼写错误:

int Node::getState(void)
{
    //return 0;
    return state;

}

会修复它。 (成员变量state只能在Node类的方法中进行评估。您当前正在全局命名空间中定义函数int getState(),这在您尝试引用类数据成员之前是完全合法的。这就是编译错误有点神秘的原因。

答案 1 :(得分:1)

更改

int  getState(void)

int  Node::getState(void)

前者声明了一个新的自由函数,Node的成员不在其范围内。

答案 2 :(得分:1)

除此之外,你忘了在成员函数getState的定义中指定类名(必须有

int  Node::getState(void)
{
    //return 0;
    return state;

}

)您的代码无效。首先,该类没有带有两个参数的构造函数。所以编译器应该为这样的语句发出错误

Node* b=new Node(INPUT, "B");

此外,您正在尝试使用下标运算符进行空向量输入(输入[j] - &gt; setState(rand()%2);)

vector<Node*> inputs;
vector<Node*> outputs;

for(int i=0;i<5;i++) {
    for(unsigned int j=0;j<inputs.size();j++) {
        inputs[j]->setState(rand()%2);
        cout << inputs[j]->getState(); // THIS LINE IS GIVING THE ERROR
    }

}

那就是内部循环永远不会被执行。

答案 3 :(得分:0)

只需使用int getState(void)

指明属于int Node::getState(){return state;}的班级