2013-07-10 74 views
1

我一直在試圖構建一個名爲Micro-manager的開源軟件的設備適配器來控制顯微鏡,並且存在一些我面臨的問題,兩個文件(一個頭文件和另一個CPP文件)已經存在於Micro-Manager的開源軟件包中。錯誤C2491:在頭文件中聲明並在C++中定義的函數

//MoudluleInterface.h 

#ifndef _MODULE_INTERFACE_H_ 
#define _MODULE_INTERFACE_H_ 

#ifdef WIN32 
#ifdef MODULE_EXPORTS 
    #define MODULE_API __declspec(dllexport) 
#else 
    #define MODULE_API __declspec(dllimport) 
#endif 

#else 
#define MODULE_API 
#endif 
#define MM_MODULE_ERR_OK 1000 
#define MM_MODULE_ERR_WRONG_INDEX 1001 
#define MM_MODULE_ERR_BUFFER_TOO_SMALL 1002 

/////////////////////////////////////////////////////////////////////////////// 
// header version 
// NOTE: If any of the exported module API calls changes, the interface version 
// must be incremented 
// new version 5 supports device discoverability 
#define MODULE_INTERFACE_VERSION 7 

#ifdef WIN32 
const char* const LIB_NAME_PREFIX = "mmgr_dal_"; 
#else 
const char* const LIB_NAME_PREFIX = "libmmgr_dal_"; 
#endif 

#include "MMDevice.h" 

/////////////////////////////////////////////////////////////////////////////// 
// Exported module interface 
/////////////////////////////////////////////////////////////////////////////// 
extern "C" { 
MODULE_API MM::Device* CreateDevice(const char* name); 
MODULE_API void DeleteDevice(MM::Device* pDevice); 
MODULE_API long GetModuleVersion(); 
MODULE_API long GetDeviceInterfaceVersion(); 
MODULE_API unsigned GetNumberOfDevices(); 
MODULE_API bool GetDeviceName(unsigned deviceIndex, char* name, unsigned  bufferLength); 
MODULE_API bool GetDeviceDescription(const char* deviceName, char* name, unsigned bufferLength); 

這裏是(不允許dllimport的函數的定義),它定義了這些功能

 //ModuleInterface.cpp 
     #define _CRT_SECURE_NO_DEPRECATE 
     #include "ModuleInterface.h" 
     #include <vector> 
     #include <string> 

     typedef std::pair<std::string, std::string> DeviceInfo; 
     std::vector<DeviceInfo> g_availableDevices; 

     int FindDeviceIndex(const char* deviceName) 
    { 
    for (unsigned i=0; i<g_availableDevices.size(); i++) 
    if (g_availableDevices[i].first.compare(deviceName) == 0) 
    return i; 

    return -1; 
    } 

    MODULE_API long GetModuleVersion() 
{ 
return MODULE_INTERFACE_VERSION; 
} 

    MODULE_API long GetDeviceInterfaceVersion() 
{ 
return DEVICE_INTERFACE_VERSION; 
} 

MODULE_API unsigned GetNumberOfDevices() 
{ 
return (unsigned) g_availableDevices.size(); 
} 

MODULE_API bool GetDeviceName(unsigned deviceIndex, char* name, unsigned bufLen) 
{ 
if (deviceIndex >= g_availableDevices.size()) 
    return false; 

現在的問題是,它給我一個錯誤C2491的CPP文件的一部分 我做了關於研究這和它通常是當它應該被聲明時定義的函數,我已經在ModuleInterface.h中定義了函數,然後在ModuleInterface.cpp中使用它,但它仍然顯示相同的錯誤。 這種錯誤是否會發生?或者代碼有問題嗎?

回答

1

您不應該在定義中重複您的MODULE_API聲明,並將其作爲聲明的一部分足夠好。從.cpp文件中刪除MODULE_API的使用,並編譯代碼。

相關問題