У меня есть этот кусок кода, где я пытаюсь впихнуть в векторе уже построенный элемент из unordered_map
:Не удается отодвинуть объект класса из конструктора
class A {
public:
A(const std::string& a) {}
}
int main() {
std::unordered_map<std::string, A> map {{"A", A("A")}, {"B", A("B")}};
std::vector<A> vec;
vec.push_back(map["A"]);
}
Но почему я получаю ошибки, связанные с в вектор-х push_back
:
/usr/local/include/c++/6.3.0/tuple:1586:70: error: no matching function for call to 'A::A()'
second(std::forward<_Args2>(std::get<_Indexes2>(__tuple2))...)
^
main.cpp:8:9: note: candidate: A::A(const string&)
A(const std::string& a) {}
^
main.cpp:8:9: note: candidate expects 1 argument, 0 provided
main.cpp:6:7: note: candidate: constexpr A::A(const A&)
class A {
^
main.cpp:6:7: note: candidate expects 1 argument, 0 provided
main.cpp:6:7: note: candidate: constexpr A::A(A&&)
main.cpp:6:7: note: candidate expects 1 argument, 0 provided
Обратите внимание, что если вы не хотите, чтобы создать конструктор по умолчанию для вашего типа (или это невозможно), вы можете использовать 'карту :: найти()' метод вместо 'оператора []' - бывшее имеет возможность возвращать «no element found» ('map :: end()') – yeputons