如何在使用auto的函数中使用向量(在头文件中)

时间:2019-06-24 18:03:49

标签: c++ vector

我想在使用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;
    }
}

documentation

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_|

2 个答案:

答案 0 :(得分:2)

您可能想要这样的东西:

#include <vector>
template <typename T>
void showList(vector <T> b);

请注意-大多数人通过引用传递vector(常量或其他方式),以避免复制整个向量。但这取决于showList将如何处理。

答案 1 :(得分:1)

要处理任何种类的集合,我建议您从C ++标准函数中删除一个页面:使用模板和迭代器。

这样做可以使功能看起来像

loc