Compiler errors C2800 Through C2899

The articles in this section of the documentation explain a subset of the error messages that are generated by the compiler.

Important

The Visual Studio compilers and build tools can report many kinds of errors and warnings. After an error or warning is found, the build tools may make assumptions about code intent and attempt to continue, so that more issues can be reported at the same time. If the tools make the wrong assumption, later errors or warnings may not apply to your project. When you correct issues in your project, always start with the first error or warning that's reported, and rebuild often. One fix may make many subsequent errors go away.

To get help on a particular diagnostic message in Visual Studio, select it in the Output window and press the F1 key. Visual Studio opens the documentation page for that error, if one exists. You can also use the search tool at the top of the page to find articles about specific errors or warnings. Or, browse the list of errors and warnings by tool and type in the table of contents on this page.

Note

Not every Visual Studio error or warning is documented. In many cases, the diagnostic message provides all of the information that's available. If you landed on this page when you used F1 and you think the error or warning message needs additional explanation, let us know. You can use the feedback buttons on this page to raise a documentation issue on GitHub. If you think the error or warning is wrong, or you've found another problem with the toolset, report a product issue on the Developer Community site. You can also send feedback and enter bugs within the IDE. In Visual Studio, go to the menu bar and choose Help > Send Feedback > Report a Problem, or submit a suggestion by using Help > Send Feedback > Send a Suggestion.

You may find additional assistance for errors and warnings in Microsoft Learn Q&A forums. Or, search for the error or warning number on the Visual Studio C++ Developer Community site. You can also search Stack Overflow to find solutions.

For links to additional help and community resources, see Visual C++ Help and Community.

Error messages

Error Message
Compiler error C2800 'operator operator' cannot be overloaded
Compiler error C2801 'member' must be a non-static member
Compiler error C2802 static member 'operator operator' has no formal parameters
Compiler error C2803 'operator operator' must have at least one formal parameter of class type
Compiler error C2804 binary 'operator operator' has too many parameters
Compiler error C2805 binary 'operator operator' has too few parameters
Compiler error C2806 'operator operator' has too many formal parameters
Compiler error C2807 the second formal parameter to postfix 'operator operator' must be 'int'
Compiler error C2808 unary 'operator operator' has too many formal parameters
Compiler error C2809 'operator operator' has no formal parameters
Compiler error C2810 'interface': an interface can only inherit from another interface
Compiler error C2811 'type1': cannot inherit from 'type2', a ref class can only inherit from a ref class or interface class
Compiler error C2812 #import is not supported with /clr:pure and /clr:safe
Compiler error C2813 #import is not supported with /MP
Compiler error C2814 'member': a native type cannot be nested within a managed/WinRT type 'class'
Compiler error C2815 'operator delete': first formal parameter must be 'void *', but 'type' was used
Compiler error C2816 invocation of function-like macro 'identifier' is missing terminating ')'
Compiler error C2817 return type for 'operator delete' must be 'void'
Compiler error C2818 application of overloaded 'operator ->' is recursive through type 'class'
Compiler error C2819 type 'class' does not have an overloaded member 'operator ->'
Compiler error C2820 Obsolete.
Compiler error C2821 first formal parameter to 'operator new' must be 'size_t'
Compiler error C2822 local unwind is not supported on this platform
Compiler error C2823 a typedef template/generic is illegal
Compiler error C2824 return type for 'operator new' must be 'void *'
Compiler error C2825 'identifier': must be a class or namespace when followed by '::'
Compiler error C2826 Obsolete.
Compiler error C2827 'operator operator' cannot be globally overridden with unary form
Compiler error C2828 'operator operator' cannot be globally overridden with binary form
Compiler error C2829 'operator operator' cannot have a variable parameter list
Compiler error C2830 only placement parameters to 'operator new' can have default values
Compiler error C2831 'operator operator' cannot have default parameters
Compiler error C2832 'identifier': a reference type cannot be value-initialized
Compiler error C2833 'operator token' is not a recognized operator or type
Compiler error C2834 'operator operator' must be globally qualified (Obsolete in Visual Studio 2022.)
Compiler error C2835 user-defined conversion 'type' takes no formal parameters
Compiler error C2836 'identifier': only one non-static data member of a union may have a default member initializer
Compiler error C2837 'function': cannot use OpenMP directives and #pragma loop(hint_parallel) in same function
Compiler error C2838 'identifier': illegal qualified name in member declaration
Compiler error C2839 invalid return type 'type' for overloaded 'operator ->'
Compiler error C2840 instruction word argument not constant
Compiler error C2841 register argument not constant
Compiler error C2842 'class': a managed/WinRT type may not define its own 'operator new' or 'operator delete'
Compiler error C2843 'member': cannot take the address of a non-static data member or method of a managed/WinRT type
Compiler error C2844 'identifier': cannot be a member of interface 'interface'
Compiler error C2845 'type': pointer arithmetic not allowed on this type
Compiler error C2846 'interface': an interface cannot have a constructor
Compiler error C2847 cannot apply sizeof to managed/WinRT type 'class'
Compiler error C2848 'class': a managed/WinRT type cannot be a member of a union
Compiler error C2849 'interface': an interface cannot have a destructor
Compiler error C2850 'construct': only allowed at file scope; may not be in a nested construct
Compiler error C2851 'enum': A public WinRT enum can only use 'int' or 'unsigned int' as a base type
Compiler error C2852 'identifier': only data members can be initialized within a class
Compiler error C2853 'identifier': a non-static data member cannot have a type that contains 'auto'
Compiler error C2854 syntax error in #pragma hdrstop
Compiler error C2855 command-line option 'option' inconsistent with precompiled header
Compiler error C2856 #pragma hdrstop cannot be inside an #if block
Compiler error C2857 '#include' statement specified with the /Ycfilename command-line option was not found in the source file
Compiler error C2858 command-line option '/Yc (/Fdfilename)' inconsistent with precompiled header, which used '/Fdfilename' (Obsolete in Visual Studio 2022.)
Compiler error C2859 filename is not the filetype file that was used when this precompiled header was created, recreate the precompiled header.
Compiler error C2860 'void' cannot be used as a function parameter except for '(void)'
Compiler error C2861 'declaration': an interface member function cannot be defined
Compiler error C2862 'interface': an interface can only have public members
Compiler error C2863 'interface': an interface cannot have friends
Compiler error C2864 'identifier': a static data member/template variable with an in-class initializer must have non-volatile const integral type
Compiler error C2865 'operator': illegal comparison for object pointer/handle
Compiler error C2866 Obsolete.
Compiler error C2867 'identifier': is not a namespace
Compiler error C2868 'identifier': illegal syntax for using-declaration; expected qualified-name
Compiler error C2869 'identifier': has already been defined to be a namespace
Compiler error C2870 'identifier': a namespace definition must appear either at file scope or immediately within another namespace definition
Compiler error C2871 'identifier': a namespace with this name does not exist
Compiler error C2872 'identifier': ambiguous symbol
Compiler error C2873 'symbol': symbol cannot be used in a using-declaration
Compiler error C2874 using-declaration causes a multiple declaration of 'identifier'
Compiler error C2875 using-declaration causes a multiple declaration of 'class::identifier' (Obsolete in Visual Studio 2022.)
Compiler error C2876 'class::member': not all overloads are accessible
Compiler error C2877 'member' is not accessible from 'class'
Compiler error C2878 'identifier': a namespace or class of this name does not exist
Compiler error C2879 'identifier': only an existing namespace can be given an alternative name by a namespace alias definition
Compiler error C2880 __swi or __hvc requires a valid constant as first argument (SWI number)
Compiler error C2881 'identifier': is already used as an alias for 'class'
Compiler error C2882 'identifier': illegal use of namespace identifier in expression
Compiler error C2883 'function': function declaration conflicts with 'identifier' introduced by using-declaration
Compiler error C2884 'identifier': introduced by using-declaration conflicts with local function 'function'
Compiler error C2885 'class::identifier': not a valid using-declaration at non-class scope
Compiler error C2886 'class::identifier': symbol cannot be used in a member using-declaration
Compiler error C2887 __swi or __hvc cannot have more than five arguments (SWI number, r0 - r3)
Compiler error C2888 'identifier': symbol cannot be defined within namespace 'namespace'
Compiler error C2889 'class': a managed/WinRT class type cannot be a virtual base class
Compiler error C2890 'class': a ref class can only have one non-interface base class
Compiler error C2891 'parameter': cannot take the address of a template parameter
Compiler error C2892 local class shall not have member templates
Compiler error C2893 Failed to specialize function template 'template'
Compiler error C2894 templates cannot be declared to have 'C' linkage
Compiler error C2895 'declaration': cannot explicitly instantiate a function template that has been declared with dllimport
Compiler error C2896 'function1': cannot use function template/generic 'function2' as a function argument (Obsolete in Visual Studio 2022.)
Compiler error C2897 a destructor/finalizer cannot be a function template
Compiler error C2898 'declaration': member function templates cannot be virtual
Compiler error C2899 Obsolete.

See also

C/C++ Compiler and build tools errors and warnings
Compiler errors C2000 - C3999, C7000 - C7999