2015-07-24 3 views
0

У меня есть вектор std :: functions, но он не будет компилироваться. если я делаю это:Вектор std :: функции error

#include <vector> 
#include <functional> 
using namespace std; 
vector<function> functions; 

Я получаю note: expected a type, got ‘function’ error: template argument 2 is invalid. Я компилирую на g ++ с -std=c++11. Как я могу заставить это работать? Благодаря!

+2

Вы хотите что-то вроде 'vector functions;'? –

+2

Один шаг за раз. Как бы вы создавали экземпляр одного объекта 'function'? Как только вы это поняли, вы можете попробовать сделать из них вектор. – juanchopanza

ответ

1

std::function требует, чтобы вы предоставили ему дополнительные типы, которые необходимы для представления функции в качестве параметров шаблона (тип возврата, типы параметров). Без параметров шаблона std::function не определен, что дает вам ошибку, которую вы здесь.

Итак, сначала вы должны выяснить типы функций, прежде чем пытаться определить вектор, который их содержит.

0

Вы должны указать тип функции вы хотите, чтобы держать в векторе, что-то вроде этого:

#include <vector> 
#include <functional>                       
using namespace std; 

vector<function<int()>> functions; 

int main() { 
    functions.push_back([](){ return 1; }); 
    return 0; 
} 

> g++ test.cpp -std=c++1y 

Здесь, в которой нужно указать, что functions займет function, который не принимает параметров и возвращает int.

Смежные вопросы