标题正确,但找不到标识符 [英] Header correct, but identifier not found

查看:192
本文介绍了标题正确,但找不到标识符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个项目(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>



/ showIncludes列出以下内容(我在前两个错误消息之后停止列表):

  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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆