一个类的方法可以't访问同一类的int变量

Method of one class can't access the int variable of same class

本文关键字:访问 一类 变量 int 一个 方法      更新时间:2023-10-16

注意:请停止向下投票。。。我试了很多次,但就是找不到台风。

我有一个类Node,它有一些方法和变量。我试图从两种方法访问变量int state,即void 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;
}

错误:错误:未在此作用域中声明"state"

一个简单的打字错误:

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

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

更改

int  getState(void)

int  Node::getState(void)

前者声明了一个新的自由函数,Node的成员不直接在其作用域中。

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

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

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

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

此外,您还试图将下标运算符用于空向量输入(inputs[j]->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
    }
}

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

只需指示int getState(void)属于哪个类别,int Node::getState(){return state;}