簡體   English   中英

一類的方法無法訪問同一類的int變量

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

注意:請停止投票...我嘗試了很多,但這只是我找不到的錯字。

我有一個類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;

}

錯誤:錯誤:未在此范圍內聲明“狀態”

一個簡單的錯字:

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 Node::getState(){return state;}指示int getState(void)屬於哪個類int Node::getState(){return state;}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM