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

今天在做一个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, 0, tc, -1, c, wcslen(tc), 0, 0);
	c[wcslen(tc)] = 0;
#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 1;
}

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 1;
}

int open_windows_lua(lua_State *tolus_S)
{
	lua_register(tolus_S, "win_openFileDialog", openFileDialog);
	lua_register(tolus_S, "win_saveFileDialog", saveFileDialog);
	return 0;
}

 

后来翻阅,查出原因:

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

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

时间: 2025-01-03 20:04:10

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

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

原文 利用try-catch判断变量是已声明未声明还是未赋值 这篇文章主要介绍了利用try-catch判断变量是已声明未赋值还是未声明,需要的朋友可以参考下 目的是如果一个变量是已声明未赋值,就可以直接赋值:并且不能改变变量的作用域 如果未声明的话,就重新声明, 在网上搜了下,常见的方法是if(typeof(a)=='undefined'){var a='ss';}, 但是这种方法对未声明或已声明未赋值的变量都会返回true.而且如果是这样: 代码如下: var a; function f(){

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

1.错误描述 ReferenceError: Error #1065: 变量 dataGridArray 未定义. at global/flash.utils::getDefinitionByName() at mx.utils::DescribeTypeCache$/describeType()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\utils\DescribeTypeCache.as:106] at mx.utils::Objec

PHP如何区分未定义,null

今天遇到群里一个人提的问题,isset无法区分未定义和null怎么办? 下面是代码. <?php$b = null;$c = '';$arr = get_defined_vars(); if(!isset($a) && !array_key_exists('a', $arr)){    echo '变量未定义';}else if($a === null){    echo '变量已定义,但变量为空';}else{    echo '变量已定义且变量不为空';} echo '<b

函数声明和函数定义中的默认参数浅析

默认参数是存在于函数的声明中,还是函数的定义中呢? 我在VS6.0和VS2008下做了如下实验,并做出了简单的总结,有不足或者不准确的地方,欢迎大家拍砖,我会及时修正相关内容. 实验一:默认参数不能同时存在于函数声明和函数定义中. #include <iostream> #include <tchar.h> using namespace std; void SetHeight(double dHeight = 183.5); int _tmain(int argc, TCHAR*

android动态加载已安装和未安装的apk资源

在android开发中动态加载已安装和未安装的apk资源,是很有用的,可以用来实现换肤功能等等.今天我们来学习. 首先新建一个工程plugpicinstall,我们需要往该工程的asset目录和drawable目录下拷贝一些呆会需要加载的图片.运行该工程,即安装. 我们先看看如何实现加载已经安装的apk中的资源: 我们需要先写两个方法,用来获取对应的已安装的apk的context对象和resource对应的id,如下: /** * 该方法用来获取已经安装的apk对应的context对象 * @r

IE11“__doPostBack”未定义”

IE 11 下<asp:LinkButton> 点击出现 “__doPostBack”未定义” 在项目根目录 App_Browsers 下新建 浏览器文件(.browser),让其与IE11的 UserAgent 匹配,使 .net framework 认识这是一个已知的浏览器,可以正常地向客户端输出脚本. 在文件里输入以下内容,保存即可. [html] view plaincopyprint? <browsers> <browser id="IE11"

ASP.NET Ajax 客户端框架未能加载、&quot;Sys&quot;未定义

在Windows Server 2003 系统上部署asp.net项目出现以下问题: IIS为6.0 导致菜单控件的图片显示不出来: WebSite:程序中的图片显示正常. 但用到ASP.net 2.0 的 asp:TreeView 控件,控件显示不出图片 图片属性: 地址:http://localhost/WebSite/WebResource.axd?d=41VAQHZc9t11gcfcSh8IynBrLxqhiiUYVpPeaSf8-4s1&t=633965754543750000协议:超

JQuery $未定义

---恢复内容开始--- JQuery $未定义 (2012-07-23 15:14:45) 转载▼ 标签: 杂谈 分类: javaEE jquery是Yii集成的,利用jquery写的代码$(document).ready(function(){// 操作列表$('.operate').mouseover(function() {$('#operate-'+$(this).attr('key')).show();}).mouseout(function() {$('#operate-'+$(t

dsp端编译异常之max和min未定义

(1)在函数之前 声明__stdcall 时 在linux 端或dsp端 linux 之前的加上宏定义 __stdcall是MS的编译器使用的只需要#define __stdcall定义一个宏就可以 http://bbs.csdn.net/topics/40384543 http://bbs.csdn.net/topics/350100595 (2) 貌似linux 下的min 和max 都可以在math库函数中定义,但是在dsp端编译却出现未定义,只能自己加个宏定义咯