标题正确,但找不到标识符 [英] Header correct, but identifier not found
问题描述
我有两个项目(x64)。
A 。写在C(wxWidgets)---编辑:它在C ++!
B 。以C ++编写
A 编译正常,但 B (使用 A < >)在我尝试编译时会出现几个错误。
我建议错误的原因是一样的,所以我只提到第一个。
它说:
strlen:未找到标识
在提供错误消息的文件(wxcrtbase.h)中,包括以下标题:
#include< stdio.h>
#include< string.h>`
/ strong>包含 A 中的以下标头:
#includewx / wx.h
#includewx / dcbuffer.h
#includewx / spinctrl.h
所以,目前,我不知道从哪里开始搜索的错误的原因。可能是因为我有C和C ++文件?也许我是为x64编译的?
感谢您的帮助!
编辑:更多信息
在wxcrtbase.h中生成第一条错误消息的行中的行是:
#ifdef __cplusplus
inline size_t wxStrlen(const char * s){return s? wxCRT_StrlenA(s):0; }
inline size_t wxStrlen(const wchar_t * s){return s? wcslen(s):0; }
wxcrtbase.h的include的顺序是
#include< stdio.h>
#include< string.h>
#include< ctype.h>
#include< wctype.h>
#include< time.h>
#include< io.h>
1>正在编译...
1> widget.cpp
1>注意:include file:m :\visual studio 2008 \projects\general\rama\src\widget.h
1>注意:包括文件:C:\Program Files(x86)\Microsoft Visual Studio 9.0 \\ \\ VC \include \string
1>注意:包括文件:C:\Program Files(x86)\Microsoft Visual Studio 9.0 \VC\include\istream
1>注:包括文件:C:\Program Files(x86)\Microsoft Visual Studio 9.0 \VC\include\ostream
1>注意:包括文件:C:\Program Files Microsoft Visual Studio 9.0 \VC\include\ios
1>注意:包括文件:C:\Program Files(x86)\ Microsoft Visual Studio 9.0 \VC\include\xlocnum
1>注意:包括文件:C:\Program Files(x86)\Microsoft Visual Studio 9.0 \VC\include\climits
1>注意:包括文件:C:\Program Files (x86)\ Microsoft Visual Studio 9.0 \VC\include\yvals.h
1>注意:包括文件:C:\Program Files(x86)\ Microsoft Visual Studio 9.0 \VC \\ \\include\crtdefs.h
1>注意:包括文件:C:\Program Files(x86)\Microsoft Visual Studio 9.0 \VC \include\sal.h
1>注意:包括文件:C:\program files(x86)\microsoft visual studio 9.0 \vc\include\codeanalysis\sourceannotations.h
1>注意:包括文件:C:\Program文件(x86)\Microsoft Visual Studio 9.0 \VC\include\crtassem.h
1>注意:包括文件:C:\Program Files(x86)\Microsoft Visual Studio 9.0 \VC \include\vadefs.h
1>注意:包括文件:C:\Program Files(x86)\Microsoft Visual Studio 9.0 \VC\include\use_ansi.h
1> ;注意:包括文件:C:\Program Files(x86)\Microsoft Visual Studio 9.0 \VC\include\limits.h
1>注意:包括文件:C:\Program Files x86)\ Microsoft Visual Studio 9.0 \VC\include\crtdefs.h
1>注意:包括文件:C:\Program Files(x86)\ Microsoft Visual Studio 9.0 \VC\ include \cstdio
1>注意:包括文件:C:\Program Files(x86)\Microsoft Visual Studio 9.0 \VC\include\stdio.h
1>注意:包括文件:C:\ Program Files(x86)\Microsoft Visual Studio 9.0 \VC\include\crtdefs.h
1>注意:包括文件:C:\Program Files(x86)\ Microsoft Visual Studio 9.0 \VC\include\swprintf.inl
1>注意:包括文件:C:\Program Files(x86)\ Microsoft Visual Studio 9.0 \VC\include\cstdlib
1>注意:包括文件:C:\Program Files(x86)\Microsoft Visual Studio 9.0 \\\\\\\\\\\\\\\\\\\\\\\\\\\\stdlib.h
1& \Program Files(x86)\Microsoft Visual Studio 9.0 \VC\include\crtdefs.h
1>注意:包括文件:C:\Program Files(x86)\Microsoft Visual Studio 9.0 \VC\include\streambuf
1>注意:包括文件:C:\Program Files(x86)\Microsoft Visual Studio 9.0 \VC \include \xiosbase
1>注意:包括文件:C:\Program Files(x86)\Microsoft Visual Studio 9.0 \VC \include \xlocale
1& \\ Microsoft Visual Studio 9.0 \VC\include\ cstring
1>注意:包括文件:M:\Visual Studio 2008 \Projects\general\wxWidgets-2.9.0\include\ wx \string.h
1>注意:包括文件:M:\Visual Studio 2008\Projects\general\wxWidgets-2.9.0\include\wx / defs.h
1>注意:包括文件:M:\Visual Studio 2008 \Projects\general\wxWidgets-2.9.0\include\wx / platform.h
1>注意:包括文件:M :\Visual Studio 2008 \Projects\general\wxWidgets-2.9.0\include\setupp.h
1>注意:包括文件:m:\visual studio 2008\projects\ general\wxwidgets-2.9.0\include\wx / version.h
1>注意:包括文件:m:\visual studio 2008\projects\general\wxwidgets-2.9.0\\ \\include\wx / cpp.h
1>注意:包括文件:m:\visual studio 2008\projects\general\wxwidgets-2.9.0\include\wx / cpp.h
1>注意:包括文件:M:/ Visual Studio 2008 / Projects / general / wxWidgets-2.9.0 / lib / vc_lib / mswud / wx / setup.h
1& M:\Visual Studio 2008 \Projects\general\wxWidgets-2.9.0 \include\wx / msw / libraries.h
1>注意:包括文件:M:\Visual Studio 2008 \Projects\general\wxWidgets-2.9.0\include\wx / chkconf.h
1>注意:包括文件:M:\Visual Studio 2008 \Projects\general\wxWidgets -2.9.0\include\wx / msw / chkconf.h
1>注意:包括文件:M:\Visual Studio 2008\Projects\general\wxWidgets-2.9.0\include \wx / version.h
1>注意:包括文件:M:\Visual Studio 2008 \Projects\general\wxWidgets-2.9.0\include\wx / dlimpexp.h
1>注意:包括文件:C:\Program Files(x86)\Microsoft Visual Studio 9.0 \VC\include\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\程序文件(x86)\Microsoft Visual Studio 9.0 \VC\include \crtdefs.h
1>注意:包括文件:M:\Visual Studio 2008 \Projects\general\wxWidgets- 2.9.0 \include\wx / debug.h
1>注意:包括文件:C:\Program Files(x86)\Microsoft Visual Studio 9.0 \VC\include\assert.h
1>注意:包括文件:C:\Program Files(x86)\Microsoft Visual Studio 9.0 \VC\include\crtdefs.h
1& \Visual Studio 2008 \Projects\general\wxWidgets-2.9.0\include\wx / chartype.h
1>注意:包括文件:M:\Visual Studio 2008\Projects\\ \\ general \wxWidgets-2.9.0 \include\wx / platform.h
1>注意:包括文件:C:\Program Files(x86)\Microsoft Visual Studio 9.0 \VC\ include \tchar.h
1>注意:包括文件:C:\Program Files(x86)\Microsoft Visual Studio 9.0 \VC\include\crtdefs.h
1>注:包括文件:C:\Program Files(x86)\Microsoft Visual Studio 9.0 \VC\include\wchar.h
1>注意:包括文件:C:\Program Files(x86) \ Microsoft Visual Studio 9.0 \VC\include\crtdefs.h
1>注意:包括文件:C:\Program Files(x86)\Microsoft Visual Studio 9.0 \VC\include\\ \\wtime.inl
1>注意:包括文件:M:\Visual Studio 2008 \Projects\general\wxWidgets-2.9.0\include\wx / cpp.h
1> ;注意:包括文件:M:\Visual Studio 2008 \Projects\general\wxWidgets-2.9.0 \include\wx / windowid.h
1>注意:包括文件:M: \\ Visual Studio 2008 \Projects\general\wxWidgets-2.9.0\include\wx / msw / winundef.h
1>注意:包括文件:M:\Visual Studio 2008 \Projects \general\wxWidgets-2.9.0\include\wx / features.h
1>注意:包括文件:M:\Visual Studio 2008 \Projects\general\wxWidgets-2.9。 0 \include\wx\string.h
1>注意:包括文件:C:\Program Files(x86)\ Microsoft Visual Studio 9.0 \VC\include\stdarg.h
1>注意:包括文件:M:\Visual Studio 2008 \Projects\general\wxWidgets-2.9.0\include\wx / wxcrtbase.h
1>注意:包括文件:C:\ Program Files(x86)\Microsoft Visual Studio 9.0 \VC \include\io.h
1>注意:包括文件:C:\Program Files Visual Studio 9.0 \VC\include\crtdefs.h
1>注意:包括文件:C:\Program Files(x86)\ Microsoft Visual Studio 9.0 \VC\include\ cctype
1>注意:包括文件:C:\Program Files(x86)\ Microsoft Visual Studio 9.0 \VC\include\ctype.h
1& \\ Program Files(x86)\Microsoft Visual Studio 9.0 \VC\include\crtdefs.h
1>注意:包括文件:C:\Program Files(x86)\Microsoft Visual Studio 9.0 \\ \\ VC\include\cwctype
1>注意:包括文件:C:\Program Files(x86)\Microsoft Visual Studio 9.0 \VC\include\wctype.h
1> ;注意:包括文件:C:\Program Files(x86)\Microsoft Visual Studio 9.0 \VC\include\crtdefs.h
1>注意:包括文件:C:\Program Files x86)\ Microsoft Visual Studio 9.0 \VC\include\ctime
1>注意:包括文件:C:\Program Files(x86)\Microsoft Visual Studio 9.0 \VC\include\\ \\time.h
1>注意:包括文件:C:\Program Files(x86)\Microsoft Visual Studio 9.0 \VC\include\crtdefs.h
1>注意:包括文件:C:\Program Files(x86)\Microsoft Visual Studio 9.0 \VC\include\time.inl
1>注意:包括文件:M:\Visual Studio 2008\Projects\\ \\general\wxWidgets-2.9.0\include\wx / chartype.h
1> M:\Visual Studio 2008\Projects\general\wxWidgets-2.9.0\include\ wx / wxcrtbase.h(705):错误C3861:'strlen':未找到标识符
1> M:\Visual Studio 2008 \Projects\general\wxWidgets-2.9.0\include wx / wxcrtbase.h(718):错误C3861:'_strdup':未找到标识符
- 您可以至少发布几行内容,包括编译器生成未找到标识符错误?
- 当你说你有一个
#include< string.h>
行时,/
包括 c $
showIncludes
选项(它在VS 2008 IDE的C ++项目属性页中的C / C ++ /高级/显示包含下)?
编辑新信息:
根据您所做的修改,从 / showIncludes
,似乎您可能有INCLUDE路径设置不正确。下面是日志中的几行:
1>注意:包括文件:C:\Program Files(x86) \Microsoft Visual Studio 9.0 \VC\include\ cstring
1>注意:包括文件:M:\Visual Studio 2008 \Projects\general\wxWidgets-2.9.0\include\\当MSVC的cstring头尝试包括时, string.h
,它从 wx
库中获取 string.h
编译器分发的一部分(这将在 C:\Program Files(x86)\Microsoft Visual Studio 9.0 \VC\include\string.h
)。
我不知道为什么 wx
库会命名其中一个自己的头 string.h
(而不是 wxString.h
),但我认为它的目的是某人使用类似:
#includewx / string.h
/ pre>
无论如何,我想通过确保MSVC include目录在任何其他目录之前的INCLUDE搜索路径中来解决您的问题。
I have two projects (x64).
A. Written in C (wxWidgets) --- edit: its in C++!
B. Written in C++
A compiles fine, but B (which uses functions of A) gives several errors when I try to compile.
I suggest that the reason for the errors is the same for all, so I mention only the first.
It says:
strlen: identifier not found
In the file which gives the error messages ( wxcrtbase.h ), the following headers are included:
#include <stdio.h>
#include <string.h>`
The files from B include the following headers from A:
#include "wx/wx.h"
#include "wx/dcbuffer.h"
#include "wx/spinctrl.h"
So, currently, I have no idea where to start to search for the reason of the errors. May it be that I have C and C++ files? Maybe that I compiled for x64?
Thanks for help!
edit: more info
the lines in wxcrtbase.h around the one producing the first error message are:
#ifdef __cplusplus
inline size_t wxStrlen(const char *s) { return s ? wxCRT_StrlenA(s) : 0; }
inline size_t wxStrlen(const wchar_t *s) { return s ? wcslen(s) : 0; }
The order of the includes of the wxcrtbase.h is
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <wctype.h>
#include <time.h>
#include <io.h>
The /showIncludes lists the following ( I stop with the list after the first two error messages ):
1>Compiling...
1>widget.cpp
1>Note: including file: m:\visual studio 2008\projects\general\rama\src\widget.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include \string
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\istream
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ostream
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ios
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\xlocnum
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\climits
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\yvals.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\crtdefs.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\sal.h
1>Note: including file: c:\program files (x86)\microsoft visual studio 9.0\vc\include\codeanalysis\sourceannotations.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\crtassem.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\vadefs.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\use_ansi.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\limits.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\crtdefs.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\cstdio
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\stdio.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\crtdefs.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\swprintf.inl
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\cstdlib
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\stdlib.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\crtdefs.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\streambuf
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\xiosbase
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\xlocale
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\cstring
1>Note: including file: M:\Visual Studio 2008\Projects\general\wxWidgets-2.9.0\include\wx\string.h
1>Note: including file: M:\Visual Studio 2008\Projects\general\wxWidgets-2.9.0\include\wx/defs.h
1>Note: including file: M:\Visual Studio 2008\Projects\general\wxWidgets-2.9.0\include\wx/platform.h
1>Note: including file: M:\Visual Studio 2008\Projects\general\wxWidgets-2.9.0\include\setupp.h
1>Note: including file: m:\visual studio 2008\projects\general\wxwidgets-2.9.0\include\wx/version.h
1>Note: including file: m:\visual studio 2008\projects\general\wxwidgets-2.9.0\include\wx/cpp.h
1>Note: including file: m:\visual studio 2008\projects\general\wxwidgets-2.9.0\include\wx/cpp.h
1>Note: including file: M:/Visual Studio 2008/Projects/general/wxWidgets-2.9.0/lib/vc_lib/mswud/wx/setup.h
1>Note: including file: M:\Visual Studio 2008\Projects\general\wxWidgets-2.9.0\include\wx/msw/libraries.h
1>Note: including file: M:\Visual Studio 2008\Projects\general\wxWidgets-2.9.0\include\wx/chkconf.h
1>Note: including file: M:\Visual Studio 2008\Projects\general\wxWidgets-2.9.0\include\wx/msw/chkconf.h
1>Note: including file: M:\Visual Studio 2008\Projects\general\wxWidgets-2.9.0\include\wx/version.h
1>Note: including file: M:\Visual Studio 2008\Projects\general\wxWidgets-2.9.0\include\wx/dlimpexp.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\stddef.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\crtdefs.h
1>Note: including file: M:\Visual Studio 2008\Projects\general\wxWidgets-2.9.0\include\wx/debug.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\assert.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\crtdefs.h
1>Note: including file: M:\Visual Studio 2008\Projects\general\wxWidgets-2.9.0\include\wx/chartype.h
1>Note: including file: M:\Visual Studio 2008\Projects\general\wxWidgets-2.9.0\include\wx/platform.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\tchar.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\crtdefs.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\wchar.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\crtdefs.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\wtime.inl
1>Note: including file: M:\Visual Studio 2008\Projects\general\wxWidgets-2.9.0\include\wx/cpp.h
1>Note: including file: M:\Visual Studio 2008\Projects\general\wxWidgets-2.9.0\include\wx/windowid.h
1>Note: including file: M:\Visual Studio 2008\Projects\general\wxWidgets-2.9.0\include\wx/msw/winundef.h
1>Note: including file: M:\Visual Studio 2008\Projects\general\wxWidgets-2.9.0\include\wx/features.h
1>Note: including file: M:\Visual Studio 2008\Projects\general\wxWidgets-2.9.0\include\wx\string.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\stdarg.h
1>Note: including file: M:\Visual Studio 2008\Projects\general\wxWidgets-2.9.0\include\wx/wxcrtbase.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\io.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\crtdefs.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\cctype
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ctype.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\crtdefs.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\cwctype
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\wctype.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\crtdefs.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\ctime
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\time.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\crtdefs.h
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\time.inl
1>Note: including file: M:\Visual Studio 2008\Projects\general\wxWidgets-2.9.0\include\wx/chartype.h
1>M:\Visual Studio 2008\Projects\general\wxWidgets-2.9.0\include\wx/wxcrtbase.h(705) : error C3861: 'strlen': identifier not found
1>M:\Visual Studio 2008\Projects\general\wxWidgets-2.9.0\include\wx/wxcrtbase.h(718) : error C3861: '_strdup': identifier not found
解决方案 A few things to try and/or answer:
- Can you post at least the few lines around and including the one that the compiler generates the 'identifier not found' error?
- When you say you have an
#include <string.h>
line, exactly which file(s) and does it precede the various wx
includes?
- Can you post the output of the included headers when you build with the
/showIncludes
option (it's in the VS 2008 IDE's C++ project property page under "C/C++/Advanced/Show Includes")?
Edit, with new information:
Based on the edit you made that included a more complete listing from /showIncludes
, it appears that you might have the INCLUDE path set incorrectly. Here are a couple of lines from the log:
1>Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\cstring
1>Note: including file: M:\Visual Studio 2008\Projects\general\wxWidgets-2.9.0\include\wx\string.h
When MSVC's cstring header is trying to include string.h
, it's picking up a string.h
header from the wx
library instead of the one that's part of the compiler distribution (which would be in C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\string.h
).
I'm not sure why the wx
library would name one of their own headers string.h
(instead of, say, wxString.h
), but I assume that it's intended to be picked up by someone using something like:
#include "wx/string.h"
Regardless, I think you'll fix your problem by making sure that the MSVC include directory is in the INCLUDE search path before any other directory.
这篇关于标题正确,但找不到标识符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!