注意:请停止downvoting ...我尝试了很多,但这只是一个我无法找到的错字。
我有一个类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;
}
错误:错误:未在此范围内声明“州”
答案 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;}
的班级