我有以下节点
struct Node
{
Node(int s, std::vector<uint8_t> d) : score(s), data(d){};
int score;
std::shared_ptr<Node> left = nullptr;
std::shared_ptr<Node> right = nullptr;
std::vector<uint8_t> data;
};
目前,我正在从一个文件中读取一堆字符串并将其推回到字符串向量上。然后我继续创建一个队列std::queue<Node> myQueue
。然后我使用a为每个循环和我的序列中的每个项目,我使用包含我需要它们转换为的值的枚举转换它。然后我创建一个新的shared_ptr,将得分为0并插入新转换的向量。但是,当我尝试编译它时,我收到以下错误:
error: no matching function call to 'std::queue<Node>::push(std::shared_ptr<Node>&)'
我有点陷入困境,因为我不确定为什么它不能编译,因为这看起来很简单。
enum class Items : uint8_t
{
A = 0x00,
T = 0x01
};
std::vector<uint8_t> convert(std::string &s)
{
std::vector<uint8_t> temp;
for (int i = 0; i < s.size(); ++i)
{
switch(s[i])
{
case 'A':
temp.push_back(uint8t_t(Items::A));
break;
case 'T':
temp.push_back(uint8t_t(Items::T));
break;
}
}
return temp;
}
int main()
{
std::vector<std::string> sequences;
std::ifstream file("strings.txt");
std::string line;
while (std::getline(file,line))
{
sequences.push_back(line);
}
std::queue<Node> myQueue;
for(auto && e : sequences)
{
std::vector<uint8_t> strings = convert(e);
auto makeNode = std::make_shared<Node>(0,strings);
myQueue.push(makeNode);
}
}
我不知道我做错了什么,我认为这是构建节点队列的正确方法。
答案 0 :(得分:1)
您尝试将对象Node推送到对象Node的std :: shared_ptr队列。指针不是对象。
创建队列的正确方法是:
std::queue<std::shared_ptr<Node>> myQueue;