class token
{
public:
char kind;
double value;
};
token get_token()
{
token t;
token t2;
cin >> t.value >> t2.kind >> t.value >> t2.kind >> t.value;
nums.push_back(t);
nums.push_back(t2);
return t;
}
我有一个课程令牌。
我正在尝试使用类和对象创建一个计算器。但是我不知道如何从向量访问某些元素。
我有一个由两个成员(char kind
,double value
)组成的班级(令牌)。一个double
和一个char
(按住'+',“-”和1、2等)。其值由用户提供。
我创建了两个标记(t
,t2
)来保存值。
我正在将输入发送到相同类型(vector <token> nums
)的向量中。如何从向量中的两个标记(t
和t2
)访问元素。
我可以成功地表示t中的元素,但是我不知道如何“访问” t1
元素。
有关如何从特定令牌访问向量中的元素的任何帮助?
我想添加nums [i] .value,但我不知道如何从t和t2值中进行选择。
有没有一种方法可以从特定令牌访问向量中的元素?
我想添加nums[i]
。value,但是我不知道如何从t
和t2
值中进行选择。
答案 0 :(得分:4)
假设您具有全局std::vector<token>
(我假设它是全局的),实例化两个令牌对象,并使用stdin的输入设置它们的成员变量(尽管我怀疑您那里有错别字;您已经设置了) t.value
3次,t2.kind
2次,并且从未初始化t.kind
或t2.value
)。然后,您将这些标记的副本推送到向量中,并返回第一个标记的副本。如果您一次运行该函数,则向量的元素0中将有一个t
的副本,元素1中将有一个t2
的副本,因此您可以访问其中的令牌像这样的向量:
double value1 = nums[0].value;
double value2 = nums[1].value;
kind
成员也一样,ofc 答案 1 :(得分:0)
您似乎对它的工作方式有严重的误解。 cin >> t.value >> t2.kind >> t.value >> t2.kind >> t.value;
将覆盖t.value
三次,t2.kind
两次,仅保留最后两个输入。然后,将两个未完全初始化的对象复制到向量中,然后,返回其中一个,同时丢弃向量和第二个标记。
也许您应该开始告诉我们目标是什么。如果您想获取一些输入并将其存储,请考虑以下事项:
class Token // note that usually, classes start with upper case
{
public:
Token(char kind, double value) : kind(kind), value(value) {}
static Token prompt_user();
char kind; // consider making them private, in most cases, they shouldn't be exposed
double value;
};
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
// idea here: make functionality of Token to be internal to Token
Token Token::prompt_user()
{
cout << "Please enter kind and value of a token" << endl;
char kind;
double value;
cin >> kind >> value;
return Token(kind, value);
}
#include <vector>
using std::vector;
int main()
{
vector<Token> tokens;
tokens.push_back(Token::prompt_user());
tokens.push_back(Token::prompt_user());
for(const Token& token : tokens)
{
cout << "Token: " << token.kind << " " << token.value << endl;
}
return 0;
}
也就是说,不清楚要做什么,只是想提供一个可以开始的基础。如果需要修改并且不知道该怎么写,请写信。
此外,正如我的笔记所述,您的属性很有可能应该是私有的。他们不私有的条件是,从外部给他们任何其他值不会使对象无效。 char kind
听起来只能有特定的值,例如在加法时存储“ a”。如果是这种情况,从长远来看,您应该将其替换为枚举类,例如
enum class TokenType { addition, subtraction };