[英]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.