我有一个在visual c ++和CLR项目中创建的DLL项目。 在我的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.
更新
我试过了, 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
答案 0 :(得分:0)
auto
不会延迟查找函数的返回类型。它只是让编译器查看实现,以便找出它auto
的内容。您必须在标头中手动声明返回类型,因为包含标头的代码必须知道返回类型是什么。
答案 1 :(得分:0)
您应该声明一个返回的类型,以便编译器知道它。
// Declaration
extern "C" STAFFS_API auto GetStaffMap() -> std::map<int, std::string>;
// Definition
extern "C" auto GetStaffMap() -> std::map<int, std::string>
{
return staffMap;
}