今天在做一个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

源文件:

 #include "LevelDesignerUtils.h"

 #include <afxwin.h>         // MFC 核心组件和标准组件
#include <afxext.h> // MFC 扩展 #include <afxdisp.h> // MFC 自动化类 //wchar to char
void TC2C(const PTCHAR tc, char * c)
{
#if defined(UNICODE)
WideCharToMultiByte(CP_ACP, , tc, -, c, wcslen(tc), , );
c[wcslen(tc)] = ;
#else
lstrcpy((PTSTR)c, (PTSTR)tc);
#endif
} static int openFileDialog(lua_State *tolus_S)
{
// TODO: 在此添加命令处理程序代码
CFileDialog *dlg = new CFileDialog(true, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("json文件(*.json)|*.json|配置文件(*.dat)|*.dat|所有文件(*.*)|*.*||"));
INT_PTR nResponse = dlg->DoModal();
CString filPath = "";
if (IDCANCEL == nResponse)
{
delete dlg;
}
else if (IDOK == nResponse)
{
filPath = dlg->GetPathName();
delete dlg;
}
char filepathc[MAX_PATH];
TC2C(filPath.GetBuffer(), filepathc);
lua_pushstring(tolus_S, filepathc);
return ;
} static int saveFileDialog(lua_State *tolus_S)
{
CFileDialog *dlg = new CFileDialog(false, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("json文件(*.json)|*.json|配置文件(*.dat)|*.dat|所有文件(*.*)|*.*||"));
INT_PTR nResponse = dlg->DoModal();
CString filPath = "";
if (IDCANCEL == nResponse)
{
delete dlg;
}
else if (IDOK == nResponse)
{
filPath = dlg->GetPathName();
delete dlg;
}
char filepathc[MAX_PATH];
TC2C(filPath.GetBuffer(), filepathc);
lua_pushstring(tolus_S, filepathc);
return ;
} int open_windows_lua(lua_State *tolus_S)
{
lua_register(tolus_S, "win_openFileDialog", openFileDialog);
lua_register(tolus_S, "win_saveFileDialog", saveFileDialog);
return ;
}

后来翻阅,查出原因:

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

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

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

error c2129:静态函数已声明但未定义的更多相关文章

  1. 多.h项目出现的问题:使用了预编译头依然出现error LNK2005:***obj已在***obj中定义与c++ error C2011: “xxx”:“class”类型重定义解决办法

    使用了预编译头依然出现error LNK2005:***obj已在***obj中定义 造成该问题的可能性比较多,本人将在今后遇到时添加进来,今天先放出本人遇到的一种情况. 多重包含含有变量定义的.h文 ...

  2. 利用try-catch判断变量是已声明未赋值还是未声明

    目的是如果一个变量是已声明未赋值,就可以直接赋值,并且不能改变变量的作用域: 如果未声明的话,就重新声明, 在网上搜了下,常见的方法是if(typeof(a)=='undefined'){var a= ...

  3. 利用try-catch判断变量是已声明未声明还是未赋值

    原文 利用try-catch判断变量是已声明未声明还是未赋值 这篇文章主要介绍了利用try-catch判断变量是已声明未赋值还是未声明,需要的朋友可以参考下 目的是如果一个变量是已声明未赋值,就可以直 ...

  4. ReferenceError: Error #1065: 变量 dataGridArray 未定义

    1.错误描述 ReferenceError: Error #1065: 变量 dataGridArray 未定义. at global/flash.utils::getDefinitionByName ...

  5. 【JavaScript】如何判断一个对象是未定义的?(已解决)

    JavaScript中,如果使用了一个未定义的变量,会有这样的错误提示:XXX未定义. 代码中,怎样才能判定一个对象是否定义了呢? 使用  typeof 示例: if("undefined& ...

  6. VS2013 ERROR SCRIPT5009: “WebForm_AutoFocus”未定义

    提示错误: <script type="text/javascript">//<![CDATA[WebForm_AutoFocus('txtcUserID');/ ...

  7. [js]变量声明、函数声明、函数定义式、形参之间的执行顺序

    一.当函数声明和函数定义式(变量赋值)同名时 function ledi(){ alert('ledi1'); }; ledi(); var ledi = function (){ alert('le ...

  8. vue.js数据可以在页面上渲染成功却总是警告提示某个字段“undefined”未定义

    最近在开发公司的一个后端管理系统,用的是比较流行的vue框架.在开发过程中,总是出现各种各样的报错问题,有警告的,有接口不通的,有自己马虎造成的低级错误的等等,这些错误在一些老司机面前分分钟解决,但今 ...

  9. VS2110。VC++编译错误"error LNK2005: 已经在 XXX.obj 中定义的问题"

    有时候我们会在头文件当中定义一些全局变量或者全局函数,这种做法会比较方便,但有时候会出现“编译错误"error LNK2005: 已经在 XXX.obj 中定义的问题"的链接问题. ...

随机推荐

  1. 【读书笔记】《深入浅出nodejs》第五章 内存控制

    海量请求+长时间运行 -> 内存控制 -> 一切资源高效循环利用 1. V8的垃圾回收机制与内存限制 在Node中通过JavaScript使用内存时,只能使用部分内存(64位系统下约1.4 ...

  2. openwrt中的append-ubi定义在哪里

    include/image-commands.mk 定义如下: define Build/append-ubi sh $(TOPDIR)/scripts/ubinize-image.sh \ $(if ...

  3. JSON 中JsonConfig的使用(转)

    我们通常对一个Json串和Java对象进行互转时,经常会有选择性的过滤掉一些属性值,而json-lib包中的JsonConfig为我们提供了这种 功能,具体实现方法有以下几种.(1)建立JsonCon ...

  4. 《用 Python 学微积分》笔记 2

    <用 Python 学微积分>原文见参考资料 1. 13.大 O 记法 比较两个函数时,我们会想知道,随着输入值 x 的增长或减小,两个函数的输出值增长或减小的速度究竟谁快谁慢.通过绘制函 ...

  5. codeforces776D The Door Problem

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  6. 如何将本地的项目上传到git

    如何将本地的项目上传到git 1 进入项目文件夹,把目录变为git仓库 git init 2 把文件添加到版本库中 git add . 3 把版本提交到版本库 git commit -m 'first ...

  7. 仿照Chome的GhostPage调试功能

    今天在测试过程中发现了网站的一个bug,在大屏幕上是自适应的,小屏幕笔记本上高度不是自适应,html的高度并不是浏览器的高度,小屏幕总是差了一截,在调试过程中偶然发现差的那一小截正好是一个横向滑动条的 ...

  8. 定时模块app_timer用法及常见问题—nRF5 SDK模块系列二

    app_timer是大家经常用到的一个库,app_timer的功能就是定时,也就是说,你在某一时刻启动一个app timer并设定超时时间,超时时间一到,app_timer就会回调timeout ha ...

  9. python爬虫之下载京东页面图片

    import requests from bs4 import BeautifulSoup import time import re t = 0 #用于给图片命名 for i in range(10 ...

  10. MooseFS技术详解

    原文 http://www.tuicool.com/articles/vQvEZ3y MooseFS是一款具有冗余容错功能的分布式文件系统.它把数据分散在多台服务器上,确保一份数据多个备份副本,对外提 ...