我想在使用auto的函数中使用矢量(在头文件中)。
这引起了我的注意,但我没有办法初始化:
sites.readwrite.all
这是我在io_setup.h中的代码:
vector<decltype(a)> myVec {a, a, a, a};
实现它的正确方法是什么?或者我缺少什么?
P.s。我试过了,但是当然没用:
#ifndef IO_SETUP_H
#define IO_SETUP_H
#include <vector>
using namespace std;
void showList(vector<decltype(a)> list {a, a, a, a});
#endif
给我这个错误:
#ifndef IO_SETUP_H
#define IO_SETUP_H
#include <vector>
using namespace std;
void showList(vector <auto> b);
#endif
编辑: 这是它的cpp文件:
undefined reference to `void showList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >)'
这是我的main.cpp文件:
#include <vector>
#include <iostream>
#include "IO_Setup.h"
using namespace std;
template <typename T>;
void showList(vector<T> list);
void showList(vector<T> list)
{
int size___ = list.size();
for (unsigned int i = 0; i < size___; i++)
{
cout << '\n' << "Data " << i+1 << ": " << list.at(i);
}
}
编辑2
我使用@Someprogrammerdude的答案并像这样实现它:
#include "IO_Setup.h"
#include <iostream>
int main( int argc, char *argv[] )
{
vector<string> list;
list.push_back("1_");
list.push_back("3_");
list.push_back("5_");
list.push_back("7_");
list.push_back("9_");
showList(list);
}
现在是新的链接器错误-
template <typename T>
void showList(T begin, T end)
{
for ( iterator itr = begin; itr != end; ++itr )
{
cout << *itr << endl;
}
}
Link to my full IO_Setup.cpp file (Download not required link)
我这样称呼它:
D:\C++\Input Library\main.cpp|268|undefined reference to `void showList<__gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >(__gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::vector<std::__cxx11::basic_string<char, std::char_|
答案 0 :(得分:2)
您可能想要这样的东西:
#include <vector>
template <typename T>
void showList(vector <T> b);
请注意-大多数人通过引用传递vector
(常量或其他方式),以避免复制整个向量。但这取决于showList
将如何处理。
答案 1 :(得分:1)
要处理任何种类的集合,我建议您从C ++标准函数中删除一个页面:使用模板和迭代器。
这样做可以使功能看起来像
loc