• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

error c2129:静态函数已声明但未定义

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

今天在做一个c函数暴露给lua 时,出现这个问题。

大概代码是这样的,

头文件:

#ifndef LEVEL_DESIGNER_H
#define LEVEL_DESIGNER_H
extern "C" {
#include "lualib.h"
#include "tolua_fix.h"
}
 
static int saveFileDialog(lua_State *tolus_S);
static int openFileDialog(lua_State *tolus_S);
 
int open_windows_lua(lua_State *tolus_S);
 
#endif

源文件:

 1 #include "LevelDesignerUtils.h"
 2  
 3 #include <afxwin.h>         // MFC 核心组件和标准组件
 4 #include <afxext.h>         // MFC 扩展
 5  
 6 #include <afxdisp.h>        // MFC 自动化类
 7  
 8 //wchar to char
 9 void TC2C(const PTCHAR tc, char * c)
10 {
11 #if defined(UNICODE)
12     WideCharToMultiByte(CP_ACP, 0, tc, -1, c, wcslen(tc), 0, 0);
13     c[wcslen(tc)] = 0;
14 #else
15     lstrcpy((PTSTR)c, (PTSTR)tc);
16 #endif
17 }
18  
19 static int openFileDialog(lua_State *tolus_S)
20 {
21     // TODO: 在此添加命令处理程序代码
22     CFileDialog *dlg = new CFileDialog(true, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("json文件(*.json)|*.json|配置文件(*.dat)|*.dat|所有文件(*.*)|*.*||"));
23     INT_PTR nResponse = dlg->DoModal();
24     CString filPath = "";
25     if (IDCANCEL == nResponse)
26     {
27         delete dlg;
28     }
29     else if (IDOK == nResponse)
30     {
31         filPath = dlg->GetPathName();
32         delete dlg;
33     }
34     char filepathc[MAX_PATH];
35     TC2C(filPath.GetBuffer(), filepathc);
36     lua_pushstring(tolus_S, filepathc);
37     return 1;
38 }
39  
40 static int saveFileDialog(lua_State *tolus_S)
41 {
42     CFileDialog *dlg = new CFileDialog(false, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("json文件(*.json)|*.json|配置文件(*.dat)|*.dat|所有文件(*.*)|*.*||"));
43     INT_PTR nResponse = dlg->DoModal();
44     CString filPath = "";
45     if (IDCANCEL == nResponse)
46     {
47         delete dlg;
48     }
49     else if (IDOK == nResponse)
50     {
51         filPath = dlg->GetPathName();
52         delete dlg;
53     }
54     char filepathc[MAX_PATH];
55     TC2C(filPath.GetBuffer(), filepathc);
56     lua_pushstring(tolus_S, filepathc);
57     return 1;
58 }
59  
60  
61 int open_windows_lua(lua_State *tolus_S)
62 {
63     lua_register(tolus_S, "win_openFileDialog", openFileDialog);
64     lua_register(tolus_S, "win_saveFileDialog", saveFileDialog);
65     return 0;
66 }

后来翻阅,查出原因:

  静态函数只能在声明它的文件当中可见,不能被其他文件所调用,也就是说静态函数只能在声名它的文件中调用,在其他文件里是不能被调用的。

当然,其实我这里在头文件里做静态函数的声明也是完全没有必要的。去除后,就可以了。

 

原文链接:https://www.cnblogs.com/JhonKing/p/5736059.html


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++中异常处理的语法 try catch throw发布时间:2022-07-13
下一篇:
黄聪:C#的Microsoft图表控件发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap