내가 작업이 기능을 얻기 위해 노력하고 있어요,하지만 난오류 C2059 : 구문 오류 : '.'
가 계속오류 C2059 : 구문 오류 : '.'
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;
}
'std :: find()'및' '의 다른 기능은 친구입니다. 그들은 많은 일반적인 종류의 루프를 더 간단하고 읽기 쉬운 방법으로 작성할 수있게 해줍니다. 또한'std :: map' 또는'std :: unordered_map'을 사용하면 많은 작업을 단순화하고 성능을 향상시킬 수 있습니다. –