gpt4 book ai didi

c++ - 添加字符串 vector 和不同数据类型 vector 的映射

转载 作者:行者123 更新时间:2023-11-28 01:46:23 24 4
gpt4 key购买 nike

https://stackoverflow.com/a/44884240/3782963 中的建议.我创建了一个返回类型的方法 std::map<std::string, Spikes::data> get_data1() .我创建了一个 struct称为 data :

struct data {

std::vector<Eigen::MatrixXd> samples;
std::vector<std::string> sample_names;
int index = -1;
};

并将它放在我的 namespace 中和出课FileReader .

我的方法是这样的:

std::map<std::string, Spikes::data> FileReader::get_data1() {
std::map<std::string, Spikes::data> content;

std::vector<Eigen::MatrixXd> samples;
std::vector<std::string> sample_names;

for (auto i : list_dir()) {
if (contains_number(i)) {
samples.push_back(load_csv(location + "/" + i));
sample_names.push_back(i);
}
}

content.emplace(std::make_pair("samples", Spikes::data{samples,0}));
content.emplace(std::make_pair("sample_names", Spikes::data{sample_names,1}));

return content;

在我的 main.cpp我将此方法称为:

for (auto i:a.get_data1()["samples"].samples){
std::cout<<i;
}

但是我得到以下错误:

/cygdrive/c/Users/aksha/Box Sync/MyDrive/Projects/Akshay-GitHub/libSpikes/libSpikes/src/Core/FileReader.cpp: In member function 'std::map<std::basic_string<char>, Spikes::data> Spikes::FileReader::get_data1()':
/cygdrive/c/Users/aksha/Box Sync/MyDrive/Projects/Akshay-GitHub/libSpikes/libSpikes/src/Core/FileReader.cpp:154:69: error: no matching function for call to 'Spikes::data::data(<brace-enclosed initializer list>)'
content.emplace(std::make_pair("samples", Spikes::data{samples,0}));
^
In file included from /cygdrive/c/Users/aksha/Box Sync/MyDrive/Projects/Akshay-GitHub/libSpikes/libSpikes/src/Core/FileReader.cpp:3:0:
/cygdrive/c/Users/aksha/Box Sync/MyDrive/Projects/Akshay-GitHub/libSpikes/libSpikes/src/Core/FileReader.h:13:12: note: candidate: Spikes::data::data()
struct data {
^
/cygdrive/c/Users/aksha/Box Sync/MyDrive/Projects/Akshay-GitHub/libSpikes/libSpikes/src/Core/FileReader.h:13:12: note: candidate expects 0 arguments, 2 provided
/cygdrive/c/Users/aksha/Box Sync/MyDrive/Projects/Akshay-GitHub/libSpikes/libSpikes/src/Core/FileReader.h:13:12: note: candidate: Spikes::data::data(const Spikes::data&)
/cygdrive/c/Users/aksha/Box Sync/MyDrive/Projects/Akshay-GitHub/libSpikes/libSpikes/src/Core/FileReader.h:13:12: note: candidate expects 1 argument, 2 provided
/cygdrive/c/Users/aksha/Box Sync/MyDrive/Projects/Akshay-GitHub/libSpikes/libSpikes/src/Core/FileReader.h:13:12: note: candidate: Spikes::data::data(Spikes::data&&)
/cygdrive/c/Users/aksha/Box Sync/MyDrive/Projects/Akshay-GitHub/libSpikes/libSpikes/src/Core/FileReader.h:13:12: note: candidate expects 1 argument, 2 provided
/cygdrive/c/Users/aksha/Box Sync/MyDrive/Projects/Akshay-GitHub/libSpikes/libSpikes/src/Core/FileReader.cpp:155:79: error: no matching function for call to 'Spikes::data::data(<brace-enclosed initializer list>)'
content.emplace(std::make_pair("sample_names", Spikes::data{sample_names,1}));
^
In file included from /cygdrive/c/Users/aksha/Box Sync/MyDrive/Projects/Akshay-GitHub/libSpikes/libSpikes/src/Core/FileReader.cpp:3:0:
/cygdrive/c/Users/aksha/Box Sync/MyDrive/Projects/Akshay-GitHub/libSpikes/libSpikes/src/Core/FileReader.h:13:12: note: candidate: Spikes::data::data()
struct data {
^
/cygdrive/c/Users/aksha/Box Sync/MyDrive/Projects/Akshay-GitHub/libSpikes/libSpikes/src/Core/FileReader.h:13:12: note: candidate expects 0 arguments, 2 provided
/cygdrive/c/Users/aksha/Box Sync/MyDrive/Projects/Akshay-GitHub/libSpikes/libSpikes/src/Core/FileReader.h:13:12: note: candidate: Spikes::data::data(const Spikes::data&)
/cygdrive/c/Users/aksha/Box Sync/MyDrive/Projects/Akshay-GitHub/libSpikes/libSpikes/src/Core/FileReader.h:13:12: note: candidate expects 1 argument, 2 provided
/cygdrive/c/Users/aksha/Box Sync/MyDrive/Projects/Akshay-GitHub/libSpikes/libSpikes/src/Core/FileReader.h:13:12: note: candidate: Spikes::data::data(Spikes::data&&)
/cygdrive/c/Users/aksha/Box Sync/MyDrive/Projects/Akshay-GitHub/libSpikes/libSpikes/src/Core/FileReader.h:13:12: note: candidate expects 1 argument, 2 provided

我不知道发生了什么。

我什至尝试过:

content["samples"] = Spikes::data{samples,0};
content["sample_names"] = Spikes::data{sample_names,1};

我仍然得到同样的错误。任何帮助将不胜感激。

最佳答案

As suggested in https://stackoverflow.com/a/44884240/3782963. I created a method of return type std::map get_data1().

建议的答案明确指出您需要为data 实现构造函数:

struct data 
{
// constructors... <- here

std::vector<Eigen::MatrixXd> samples;
std::vector<std::string> names;
int index = -1;
};

@SamVarshavchik 很好地描述了原因。

我假设您的意图是使用如下构造函数:

// Constructors
data(std::vector<Eigen::MatrixXd> && rhs, int idx)
{
samples = std::move(rhs);
index = idx;
}

data(std::vector<std::string> && rhs, int idx)
{
samples = std::move(rhs);
index = idx;
}

content.emplace(std::make_pair("samples", Spikes::data{ std::move(samples), 0}));
content.emplace(std::make_pair("sample_names", Spikes::data{ std::move(sample_names), 1}));

关于c++ - 添加字符串 vector 和不同数据类型 vector 的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44896180/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com