今天在做一个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. Django---ModelForm详解

    示例: from django.db import models from django.forms import ModelForm TITLE_CHOICES = ( ('MR', 'Mr.'), ...

  2. CSS Box Model(盒子模型)

    CSS Box Model(盒子模型) 一.简介 所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用. CSS盒模型本质上是一个盒子,封 ...

  3. 访问ashx一般应用程序

    浏览器中的地址栏键入要访问页面的地址:回车(是和服务器软件打交道)----向服务器发送请求(以http协议为基础,服务器按照此协议解释理解接收到的数据),服务器接收到发送的请求,根据请求信息知道当前所 ...

  4. [洛谷P4918]信仰收集

    题目背景 随着各种势力的迁入,守矢神社丧失了不少信仰现在,为了挽回香火日益惨淡的神社,八坂神奈子派遣神社的风祝早苗去人类村落收集信仰 题目描述 你可以将村落看成一个m个点的有向无环图(编号从1−m), ...

  5. hdu4310 - Hero - 简单的贪心

    2017-08-26  15:25:22 writer:pprp 题意描述: • 1 VS n对战,回合制(你打他们一下,需要受到他们所有存活人的攻击)• 你的血量无上限,攻击力为1• 对手血量及攻击 ...

  6. 自学Java测试代码 - 简单地Student类

    2017-08-23  23:45:38 writer:pprp 写这个还蛮开心的 package test; public class Student { //创建成员变量 String name ...

  7. 安迪的第一本字典 - set--sstream

    #include <iostream> #include <string> #include <set> #include <sstream> usin ...

  8. geoserver源码学习与扩展——restAPI访问

    产生这篇文章的想法是在前端通过js调用restAPI时,总是不成功,发送ajax请求时还总是出现类似跨域的问题,后来查找才发现,默认情况下restAPI的访问都需要管理员权限,而通过ajax请求传输用 ...

  9. centos7里没有ifcfg-eth0只有 ifcfg-ens33(没有Eth0网卡)

    https://www.cnblogs.com/feixiangtk/p/6819118.html CentOS7系统安装完毕之后,输入ifconfig命令发现没有eth0,不符合我们的习惯.而且也无 ...

  10. 使用python编写微信跳一跳的自动脚本

    实现思路: 调用adb命令,截图 寻找小小人的底部中心点role(从下到上扫描,直到找到小小人相同像素的点,至于小小人像素点rgb是什么,可以使用photoshop查看) 寻找棋盘最高点top,然后寻 ...