The title is correct, but the identifier was not found

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 the functions of A ) gives some errors when trying to compile.

I assume that the cause of errors is the same for everyone, so I only mention the first one. It says:

strlen: identifier not found 

The following headers are included in the file that contains the error messages (wxcrtbase.h):

 #include <stdio.h> #include <string.h>` 

Files from B include the following headers from A :

 #include "wx/wx.h" #include "wx/dcbuffer.h" #include "wx/spinctrl.h" 

So, at present I do not know where to start searching for the cause of errors. Maybe I have C and C ++ files? Maybe I compiled for x64?

Thanks for the help!

edit: more info
The lines in wxcrtbase.h around the one producing the first error message are as follows:

 #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 inclusion of wxcrtbase.h is

 #include <stdio.h> #include <string.h> #include <ctype.h> #include <wctype.h> #include <time.h> #include <io.h> 

The following are listed in the / showIncludes list (I stop 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 
+4
source share
7 answers

Several attempts and / or answers:

  • Can you put at least a few lines around and include the one that the compiler generates an "identifier not found" error?
  • When you say that you have the line #include <string.h> , which file and it precedes the different wx does it include?
  • Can you publish the output of the included headers when creating using the /showIncludes (it is on the project page of the VS 2008 IDE C ++ project in the "C / C ++ / Advanced / Show Includes" section)?

Edit, with new information:

Based on your change, including a more complete list from /showIncludes , it looks like the INCLUDE path is set incorrectly. Here are some 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 the MSVC cstring header tries to include string.h , it picks the string.h header from the wx library instead of the one that is part of the compiler distribution (which is located in C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\string.h ).

I'm not sure why the wx library will name one of its own headers string.h (instead of, say, wxString.h ), but I assume it was going to catch someone using something like

 #include "wx/string.h" 

Regardless, I think you will fix your problem by making sure that the MSVC inclusion directory is in the INCLUDE search path before any other directory.

+1
source

If wxWidgets is C ++, and it turns on, and your compiler forbids turning on and turning on cstring / cstdio, then strlen will be in the std namespace instead of the global one. Try std :: strlen and see if this fixes the error.

0
source

Try #include<cstdio> and #include<cstring> , which are headers for C ++

0
source

The comment field is too small. I answer Michael Burr:

a.

 #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; }` 

B. string.h is found only in wxWidgets files.

There is the original order:

 #include <stdio.h> #include <string.h> #include <ctype.h> #include <wctype.h> #include <time.h> #include <io.h> 

C. Here are a few lines before and a line after the first error message:

 1>Note: including file: M:\Visual Studio 2008\Projects\general\wxWidgets-2.9.0\include\wx/chartype.h 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\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\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: 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>M:\Visual Studio 2008\Projects\general\wxWidgets-2.9.0\include\wx/wxcrtbase.h(696) : error C3861: 'strlen': identifier not found 1>M:\Visual Studio 2008\Projects\general\wxWidgets-2.9.0\include\wx/wxcrtbase.h(709) : error C3861: '_strdup': identifier not found 
0
source

Try:

 #include <cstdio> #include <cstring> #include <cctype> #include <cwctype> #include <ctime> #include <cio> using namespace std; #include "wxcrtbase.h" #include "wx/chartype.h" int main(void) { return strlen("hey there good buddy!"); } 

This is what I hate about C ++ the most.

0
source

I had the same problem. The fix for me is with the inclusion order. Enabling string.h before stdafx.h caused an error. Another thing. It seems that the compiler completely ignored string.h .

0
source

I really think you need to include cstdio and cstring (as suggested above), but in this case everything will be in the std namespace, like std :: strlen, etc.

-1
source

Source: https://habr.com/ru/post/1305255/


All Articles