2 cppabc cppabc 于 2016.01.19 15:42 提问

VC多文档视图 error C3861: "AfxGetFileTitle"找不到标识符

我在做的一个多文档视图的工程里处理关闭视图之后的处理文件的相关操作,就是关闭试图后程序出现提示"是否保存对****的更改?"的对话框,这个对话框是在SaveModified()函数中处理出现的,我需要对用户选择点击"是"或者"否"以及"取消"三个按钮后在重载的SaveModified中做处理,此函数中的默认处理中有个函数是AfxGetFileTitle,因为我只在原来的版本基础上处理选择"否"的情况,所以其他的都不做改动,但在编译我自己的版本时出现提示说"error C3861: “AfxGetFileTitle”: 找不到标识符"这个提示,是什么原因呢?

4个回答

caozhy
caozhy   Ds   Rxr 2016.01.19 16:25

这是一个没有公开的函数,你可以用CFile::GetFileTitle代替

cppabc
cppabc 我找到了,恰恰和你说的相反,这是一个全局的公用函数
2 年多之前 回复
cppabc
cppabc 没公开是指什么?
2 年多之前 回复
cppabc
cppabc 怎么得知的,这不是一个公开的函数?
2 年多之前 回复
cppabc
cppabc   2016.01.19 16:53

代码我现在就基本还买修改只是重载了一次啊,内容没怎么变,代码如下:
代码基本上没做声明修改,代码如下:
BOOL CCNCMonitorDoc::SaveModified()
{
if (!IsModified())
return TRUE; // ok to continue

CDataRecoveryHandler *pHandler = NULL;
if (AfxGetApp())
{
// if close is triggered by the restart manager, the file
// will be auto-saved and a prompt for save is not permitted.
pHandler = AfxGetApp()->GetDataRecoveryHandler();
if (pHandler != NULL)
{
if (pHandler->GetShutdownByRestartManager())
return TRUE;
}
}

// get name/title of document
CString name;
if (m_strPathName.IsEmpty())
{
// get name based on caption
name = m_strTitle;

if (pHandler != NULL)
{
// remove "[recovered]" from the title if it exists
CString strNormalTitle = pHandler->GetNormalDocumentTitle(this);
if (!strNormalTitle.IsEmpty())
name = strNormalTitle;
}

if (name.IsEmpty())
ENSURE(name.LoadString(AFX_IDS_UNTITLED));
}
else
{
// get name based on file title of path name
name = m_strPathName;
AfxGetFileTitle(m_strPathName, name.GetBuffer(_MAX_PATH), _MAX_PATH);
name.ReleaseBuffer();
}

CString prompt;
AfxFormatString1(prompt, AFX_IDP_ASK_TO_SAVE, name);
switch (AfxMessageBox(prompt, MB_YESNOCANCEL, AFX_IDP_ASK_TO_SAVE))
{
case IDCANCEL:
return FALSE; // don't continue

case IDYES:
// If so, either Save or Update, as appropriate
if (!DoFileSave())
return FALSE; // don't continue
break;

case IDNO:
// If not saving changes, revert the document

break;

default:
ASSERT(FALSE);
break;
}
return TRUE; // keep going
}

我先要修改的地方是在
case IDNO:
// If not saving changes, revert the document
这个地方添加用户电机"否"按钮不保存文件的处理,这个SaveModified函数是CDocument类的一个虚函数,里面有个AfxGetFileTitle函数,我现在在自己的doc类中的重载函数里把所有内容都弄进去,其他都没改,编译时就提示“error C3861: “AfxGetFileTitle”: 找不到标识符”的内容

cppabc
cppabc   2016.01.20 17:01

有人能回到这个问题吗?,我只想在引用原内容的情况下加入其他的操作。

91program
91program   Ds   Rxr 2016.01.19 16:14

如果你不修改,能否编译通过?应该是可以吧。
这样,就需要你研究一下你是如何修改代码的?或者,将代码贴出来分析。

cppabc
cppabc 代码在上面!
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
在VS2010中出现 error C3861: “snprintf”: 找不到标识符
snprintf()函数的格式跟printf差不多一样,是在c里面用的函数,包含在 #include 头文件中。 但snprintf()函数并不是标准c/c++中规定的函数,所以在许多编译器中,厂商提供了其相应的实现的版本。在gcc中,该函数名称就snprintf(),而在VS中称为_snprintf。 所以在需要使用snprintf()时改成_snprintf就可以了,或则在预编译处加入:
error C3861: "_beginthreadex": 找不到标识符
在网上着了很久, 1._beginthreadex要求Win2000,请在StdAfx.h开头 #define _MSC_VER 0x5000表示Win2000。失败。 2.菜单 Project-->Settings-->C/C++ --->General下Perprocessor Definitions中添加_MSC_VER=0x5000。失败。 解决方法: 在项目--属性--c++目
Visual Studio 2013(VS2013)error C3861: “__uncaught_exception”: 找不到标识符
在用VC++12.0进行编译的时候,如果加入了宏_HAS_EXCEPTIONS=0,同时直接或者间接的包含了头文件concrt.h,将会产生一个编译错误: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\concrt.h(4774) : error C3861: '__uncaught_exception': iden
error C3861: “L”: 找不到标识符
提示错误的语句:::CLSIDFromProgID(L("Shell.Application"), &clsid); 解决办法: 出现上面的错误是因为语法错误了,去掉字符串两边的括号就行了,如果是_T才需要加括号 ::CLSIDFromProgID(L"Shell.Application", &clsid);
error C3861: “InitializeCriticalSectionAndSpinCount”: 找不到标识符
VS2008的工程转换成VS2010后编译报错 error C3861: “InitializeCriticalSectionAndSpinCount”: 找不到标识符 定位到atlcore.h文件,这是系统文件没有做任何更改,不该有错的呀。主要还是版本兼容性问题。 修改方法: 新建一个targetver.h头文件,复制以下代码: #pragma once // Including
编译错误之error C3861: “getline”: 找不到标识符的问题
// f0211.cpp : 定义控制台应用程序的入口点。 //文件流   复制文件 #include "stdafx.h" #include "fstream" #include "strings" using namespace std; int main(){ ifstream in("a.in"); ofstream out("a.out"); f
error C3861: “rand”: 找不到标识符
转自VC错误:http://www.vcerror.com/?p=2010 问题描述: error C3861: “rand”: 找不到标识符 解决方法: 具体的解决方法参考文章:http://www.vcerror.com/?p=2010
error C3861: “time”: 找不到标识符
转自VC错误:http://www.vcerror.com/?p=1952 问题描述: srand((unsigned)time(0)); 编译上面的代码报错 error C3861: “time”: 找不到标识符 解决方法: 具体的解决方法参考文章:http://www.vcerror.com/?p=1952
error C3861: “AfxSocketInit”: 找不到标识符
解决方案:        包含
error C3861: “time”: 找不到标识符
error C3861: “time”: 找不到标识符