我正在尝试构建一个小型数据库的原型。首先将一些整数作为数据及其条件作为访问或不访问。最初在迭代数据集的时间设置条件。我稍后会改变一些条件(不在代码中)。
main.cpp
--------
#include <iostream>
#include <list>
#include "Data.h"
using namespace std;
int main ()
{
list<Data>* test = new list<Data>();
test->push_back(12);
test->push_back(13);
test->push_back(14);
for (list<Data>:: iterator it = test->begin(); it != test->end(); it++){
it->visited_data = false;
}
return 0;
}
Data.h
------
#ifndef DATA_H
#define DATA_H
class Data
{
public:
Data();
void isVisited(Data* data_);
bool visited_data;
};
#endif
Data.cpp
--------
#include <iostream>
#include <list>
#include "Data.h"
using namespace std;
Data::Data()
{
}
void Data::isVisited(Data* data_)
{
Data* _data = data_;
if (_data->isVisited){
cout<<"this data is visited"<<endl;
}
else
cout<<"this data is not visited"<<endl;
}
答案 0 :(得分:1)
您有一个期待Data
的容器,但您提供的是int
。您需要某种类型的转换运算符。最简单的方法是为Data
提供int
的隐式构造函数。
class Data
{
public:
Data(int)
{
// this should do something "appropriate"
}
};
但是,从目前为止发布的代码来看,您希望如何处理传入数据集(test
)的整数并不完全清楚,因为目前您没有存储在您的数据集中的值数据集,只有一个标志,表明它是否被访问过。
在旁注中,std::list
很少是最合适的数据结构,特别是如果您计划仅通过push_back()
与其进行交互,就像在您的示例中一样。对于这种情况,请更喜欢std::vector
。
另一方面,您的test
对象正在泄漏。无论如何都没有合理的理由动态分配它,所以我将为您提供一些替代方案。
最优选的方法是使用自动存储持续时间创建它,如下所示:
std::vector<Data> test;
test.push_back(12);
// ...
如果您觉得必须动态分配它,则应将其包装在智能指针中。
std::unique_ptr<std::vector<Data>> test(new std::vector<Data>);
test->push_back(12);
// ...