我正在努力让这个功能发挥作用,但我一直在努力
error C2059: syntax error : '.'
在我调用 is_declared 的两个 declare() 函数体的那一行,我想不通。我知道这与 is_declared 有关,但我遇到了麻烦。
class Variable {
public:
std::string name;
double value;
char type;
Variable(std::string n, double v) :name(n), value(v), type('v') { }
Variable(std::string n, double v, char a) :name(n), value(v), type('c') { }
};
class Symbol_table {
public:
Symbol_table();
double get(std::string s);
void set(std::string s, double d);
bool is_declared(std::string s);
double declare(std::string var, double val);
double declare(std::string var, double val, char c);
private:
std::vector<Variable> var_table;
};
Symbol_table::Symbol_table() {}
double Symbol_table::get(std::string s)
{
for (int i = 0; i<var_table.size(); ++i)
if (var_table[i].name == s) return var_table[i].value;
error("get: undefined name ",s);
}
void Symbol_table::set(std::string s, double d)
{
for (int i = 0; i<=var_table.size(); ++i)
if (var_table[i].name == s) {
if (var_table[i].type == 'c') error("set_value: Cannot change a constant's value");
var_table[i].value = d;
return;
}
error("set: undefined name ",s);
}
double Symbol_table::declare(std::string var, double val)
{//error here
if (Symbol_table.is_declared(var)) error(var," declared twice");
var_table.push_back(Variable(var,val));
return val;
}
double Symbol_table::declare(std::string vari, double valu, char c)
{//error here
if (Symbol_table.is_declared(vari)) error(vari," declared twice");
var_table.push_back(Variable(vari,valu,c));
return valu;
}
bool Symbol_table::is_declared(std::string s)
{
for (int i = 0; i<var_table.size(); ++i)
if (var_table[i].name == s) return true;
return false;
}
最佳答案
语法 Symbol_table.is_declared
在该上下文中不是有效的 C++。很可能你打算写
if (this->is_declared(var)) error(var," declared twice");
如果您愿意,您也可以省略 this->
,这是风格问题。
关于c++ - 错误 C2059 : syntax error : '.' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9763222/