У меня есть проект DLL, созданный в Visual C ++, и проект CLR.
В моем проекте DLL я экспортировал функцию с типом 'auto'.
staff.h
extern "C" STAFFS_API auto GetStaffMap();
и если staff.cpp имеет возвращаемый тип std :: map.
std::map<int, std::string> staffMap;
auto GetStaffMap()
{
return staffMap;
}
Теперь в моем приложении CLR,
Я называю эту функцию:
#include <map>
#include "Staff.h"
std::map<int, std::string> staffMap = Staffs::GetStaffMap();
И когда я компилирую программу, появляется сообщение об ошибке:
C3779 'Staffs::GetStaffMap': a function that returns 'auto' cannot be used before it is defined.
UPDATE
Я пытался,
staff.h
extern "C" STAFFS_API auto GetStaffMap() -> std::map<int, std::string>;
staff.cpp
extern "C" auto GetStaffMap() -> std::map<int, std::string> {
return staffMap;
}
, но ошибка компиляции сохраняется:
Error C2526 'GetStaffMap': C linkage function cannot return C++ class 'std::map<int,std::string,std::less<int>,std::allocator<std::pair<const _Kty,_Ty>>>' AmsCppRest c:\users\laptop-attendance\source\repos\amscpprest\amscpprest\staff.h
Error C2556 'std::map<int,std::string,std::less<int>,std::allocator<std::pair<const _Kty,_Ty>>> Staffs::GetStaffMap(void)': overloaded function differs only by return type from 'void Staffs::GetStaffMap(void)' AmsCppRest c:\users\laptop-attendance\source\repos\amscpprest\amscpprest\staff.cpp
Error C2371 'Staffs::GetStaffMap': redefinition; different basic types