I have a very simple c code:
#include<stdio.h>
int main()
{
enum boolean{true,false};
boolean bl=false;
if(bl==false)
printf("This is the false value of boool\n");
boolean bl1=true;
if(bl1==true)
{
printf("This is the true value of boool\n");
}
return 0;
}
i was just trying to use enum type variable .but it is giving following error:
tryit4.c:5: error: ‘boolean’ undeclared (first use in this function)
tryit4.c:5: error: (Each undeclared identifier is reported only once
tryit4.c:5: error: for each function it appears in.)
tryit4.c:5: error: expected ‘;’ before ‘bl’
tryit4.c:6: error: ‘bl’ undeclared (first use in this function)
tryit4.c:8: error: expected ‘;’ before ‘bl1’
tryit4.c:9: error: ‘bl1’ undeclared (first use in this function)
I don’t see any reason for it. Can you please explain what could be the reason for it?
Brent Worden
10.7k7 gold badges52 silver badges57 bronze badges
asked Dec 15, 2009 at 19:35
3
In C, there are two (actually more, but i keep it at this) kind of namespaces: Ordinary identifiers, and tag identifiers. A struct, union or enum declaration introduces a tag identifier:
enum boolean { true, false };
enum boolean bl = false;
The namespace from which the identifier is chosen is specified by the syntax around. Here, it is prepended by a enum
. If you want to introduce an ordinary identifier, put it inside a typedef declaration
typedef enum { true, false } boolean;
boolean bl = false;
Ordinary identifiers don’t need special syntax. You may declare a tag and ordinary one too, if you like.
answered Dec 15, 2009 at 19:42
2
When you declare enum boolean { true, false }
, you declare a type called enum boolean
. That the name you’ll have to use after that declaration: enum boolean
, not just boolean
.
If you want a shorter name (like just boolean
), you’ll have to define it as an alias for the original full name
typedef enum boolean boolean;
If you wish, you can declare both the enum boolean
type and the boolean
alias on one declaration
typedef enum boolean { true, false } boolean;
answered Dec 15, 2009 at 19:50
You have to declare the variables to be of type enum boolean, not just boolean. Use typedef, if you find writing enum boolean b1 = foo(); cumbersome.
answered Dec 15, 2009 at 19:40
It would really be a good idea to define your enum like this:
typedef enum {
False,
True,
} boolean;
A couple of reasons:
true
andfalse
(lowercase) are likely reserved words- false being 1 and true being 0 can cause you logic problems later
answered Dec 15, 2009 at 19:46
chrisbtoochrisbtoo
1,5729 silver badges13 bronze badges
1
You declare the enum, but not the type. What you want is
typedef enum{false, true} boolean; // false = 0 is expected by most programmers
There are still multiple problems with this:
* true
and false
are reserved words in many C compilers
* explicitly using true and false goes against the general practice of Boolean expressions in C, where zero means false and anything non-zero means true. For example:
int found = (a == b);
Edit: This works with gcc 4.1.2:
[wally@zf ~]$ ./a.out
This is the false value of boool
This is the true value of boool
[wally@zf ~]$ cat t2.c
#include<stdio.h>
int main()
{
typedef enum {true,false} boolean;
boolean bl=false;
if(bl==false)
printf("This is the false value of boool\n");
boolean bl1=true;
if(bl1==true)
{
printf("This is the true value of boool\n");
}
return 0;
}
answered Dec 15, 2009 at 19:43
wallykwallyk
56.9k17 gold badges84 silver badges148 bronze badges
3
Like previous answers demonstrate, use typedef:
typedef enum { true, false } boolean;
answered Dec 15, 2009 at 19:46
rmnrmn
2,3861 gold badge14 silver badges21 bronze badges
1
From FAQ — A list of features that C++ supports which C does not includes:
bool keyword
That FAQ is a little inaccurate, and is better stated as «a list of features that C++ supports which C89 does not include»
Add #include <stdbool.h>
to your code and it will compile as C99 on a compiler that attempts to implement C99 (such as gcc).
answered Feb 1, 2011 at 7:18
Srikar AppalarajuSrikar Appalaraju
72k54 gold badges217 silver badges264 bronze badges
In Java, the class interface or enum expected error is a compile-time error. There can be one of the following reasons we get “class, interface, or enum expected” error in Java:
Case 1: Extra curly Bracket
Java
class
Hello {
public
static
void
main(String[] args)
{
System.out.println(
"Helloworld"
);
}
}
}
In this case, the error can be removed by simply removing the extra bracket.
Java
class
Hello {
public
static
void
main(String[] args)
{
System.out.println(
"Helloworld"
);
}
}
Case 2: Function outside the class
Java
class
Hello {
public
static
void
main(String args[])
{
System.out.println(
"HI"
);
}
}
public
static
void
func() { System.out.println(
"Hello"
); }
In the earlier example, we get an error because the method func() is outside the Hello class. It can be removed by moving the closing curly braces “}” to the end of the file. In other words, move the func() method inside of Hello.
Java
class
Hello {
public
static
void
main(String args[])
{
System.out.println(
"HI"
);
}
public
static
void
func()
{
System.out.println(
"Hello"
);
}
}
Case 3: Forgot to declare class at all
There might be a chance that we forgot to declare class at all. We will get this error. Check if you have declared class, interface, or enum in your java file or not.
Case 4: Declaring more than one package in the same file
Java
package
A;
class
A {
void
fun1() { System.out.println(
"Hello"
); }
}
package
B;
public
class
B {
public
static
void
main(String[] args)
{
System.out.println(
"HI"
);
}
}
We can not put different packages into the same source file. In the source file, the package statement should be the first line.
Java
package
A;
class
A {
void
fun1() { System.out.println(
"Hello"
); }
}
public
class
B {
public
static
void
main(String[] args)
{
System.out.println(
"HI"
);
}
}
Last Updated :
28 Jan, 2021
Like Article
Save Article
Introduction
Java errors are the lifelong enemy of every developer, be it a novice or an expert. A Java developer faces a plethora of different types of errors. One such error is the class interface or enum expected error.
In this article, we will be focusing on the reason behind the occurrences of this error and how to resolve it.
The class interface or enum expected error is a compile-time error in Java. It is mainly faced by the developers at their early stages in Java development.
The primary reason behind the class interface or enum expected error is the incorrect number of curly braces. Typically, this error is faced when there is an excess or shortage of a curly brace at the end of the code.
Since the whole code is placed inside a class, interface, or enum in Java, an extra curly brace makes the compiler understand that another class is starting and no closing braces after that is considered as the incompletion of class hence it will complain about class, interface, or enum keyword.
We will be now discussing some of the basic causes of class, interface, or enum expected error and how you can fix them.
1. Misplaced Curly Braces
The primary cause of the “class, interface or enum expected” error is typically a mistyped curly brace “}” in your code.
This error could have been encountered due to either an extra curly brace after the class or due to a missed curly brace in your code.
Look at this example below:
1. public class MyClass { 2. public static void main(String args[]) { 3. System.out.println("Hello World"); 4. } 5. } 6. }
Error: /MyClass.java:6: error: class, interface, or enum expected } ^ 1 error
In the above code demonstration, there is an extra “}” curly brace at the last which is resulting in the compilation error. The removal of the extra “}” can easily resolve the error in this case.
2. A Function is declared outside of the class
Let’s look at another scenario where this error usually occurs:
1. public class MyClass { 2. public static void main(String args[]) { 3. //Implementation 4. } 5. } 6. public static void printMessage() { 7. System.out.println("Hello World"); 8. }
Error: /MyClass.java:6: error: class, interface, or enum expected public static void printHello() ^ /MyClass.java:8: error: class, interface, or enum expected } ^ 2 errors
In the above example, the class, interface, or enum expected error is faced because the function printHello() is defined outside of the class.
Although, this error is also somewhat due to misplacing of curly braces but it is important to identify this different cause so that the user would also quickly look at all the methods and their placement in the code to make sure that all functions are properly placed.
This can be easily fixed by just moving the closing curly braces “}” to the end of the class so that the printHello() method will be now inside the MyClass.
3. Class is not declared
You would also face this error if you have not declared the class. There might be a chance that you forgot to declare the class at all.
Always make sure that the class, interface, or enum is properly declared in your java file.
4. Declaration of multiple packages in the same file
More than one package cannot be present in the same Java source file. It will result in the class interface or enum expected error if your source file contains more than one package.
See the code example below where two packages are present in the same code. You must avoid this in your code:
1. package p1; 2. class class1 { 3. void fun1() { System.out.println("Hello World"); } 4. } 5. package p2; //getting class interface or enum expected 6. public class class2 { 7. public static void main(String[] args) 8. { 9. System.out.println("Hello World"); 10. }
Tips to prevent the “class, interface, or enum expected” error in Java
All the codes that we have discussed above consisted of very limited lines which makes it very easy for users to spot the misplaced curly brace but it will not be that simple if we have to look for it in a huge code with multiple methods and classes.
·Use a modern IDE
The use of an IDE can be a very good solution for preventing this error.
Various new and modern IDEs have features that automatically add the missing curly braces as detected or they right away highlights the extra added braces in your code before compilation.
Despite that, even if the error occurs, modern IDEs like Eclipse or Netbeans also give the user a visible sign of where the error is located and it will pinpoint the exact location of the error in your code.
·Indent your code
Assuming that you are not able to use an IDE, if you are writing your code in a word processing software such as Notepad, then try to correctly indent your code.
The clear indentations make it easier to identify if there are extra curly braces at the end of the code as they would be at the same indentation level, which should not be part of a valid code.
You can simply remove the extra curly braces for the code before compiling it and the class interface or enum expected error can be easily prevented.
Wrapping it up
We discussed various reasons behind the occurrence of class, interface, or enum expected error. We also looked into the same ways to prevent this error.
It is a very trivial error and can be very quickly solved but it can sometimes become a bit troubling especially when occurred in a big code. To cater to that, always use a modern IDE to prevent this error.
See Also: How To Iterate Over a Map In Java
jordan
Full Stack Java Developer | Writer | Recruiter, bridging the gap between exceptional talent and opportunities, for some of the biggest Fortune 500 companies.
If you have ever written Java programs using Notepad or inside DOS editor, then you know that how a single missing curly brace can blow your program and throw 100s of «illegal start of expression» errors during compilation of Java Programmer. I was one of those lucky people who started their programming on DOS editor, the blue window editor which allows you to write Java programs. I didn’t know about PATH, CLASSPATH, JDK, JVM, or JRE at that point. It’s our lab computer where everything is supposed to work as much as our instructor wants.
Since we don’t have the internet at that point in time, we either wait for the instructor to come and rescue us and we were surprised by how he solve the error by just putting one curly brace and all errors mysteriously go away.
Today, I am going to tell you about one such error, «class, interface, or enum expected». This is another compile-time error in Java that arises due to curly braces. Typically this error occurs when there is an additional curly brace at the end of the program.
Since everything is coded inside a class, interface, or enum in Java, once you close the curly brace for an existing class and add another closing curly braces, the compiler will expect another class is starting hence it will complain about class, interface, or enum keyword as shown in the following program:
public class Main { public static void main(String[] args) { System.out.println("Helloworld"); } } }
If you compile this program using javac, you will get the following error:
$ javac Main.java Main.java:14: class, interface, or enum expected } ^ 1 error
Since this is a small program, you can easily spot the additional curly brace at the end of the problem but it’s very difficult in a big program with several classes and methods.
This becomes even tougher if you are not using any IDE like Eclipse or NetBeans which will give you a visible sign of where an error is. If you know how to use Eclipse or any other Java IDE, just copy-paste your code into IDE and it will tell you the exact location of the error which hint to solve.
Alternatively, if you are coding in Notepad, I assume you are a beginner, then try to correctly indent your code. n our example program above, notice that the two curly braces at the end of the program are at the same indentation level, which cannot happen in a valid program. Therefore, simply delete one of the curly braces for the code to compile, the error will go away as shown below:
$ javac Main.java
So, next time you get the «class, interface, or enum expected» error, just check if you additional curly braces a the end of your program.
Other Java error troubleshooting experiences:
- How to fix «variable might not have been initialized» error in Java? (solution)
- Could not create the Java virtual machine Invalid maximum heap size: -Xmx (solution)
- Error: could not open ‘C:\Java\jre8\lib\amd64\jvm.cfg’ (solution)
- How to fix java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory (solution)
- Caused By: java.lang.NoClassDefFoundError: org/apache/log4j/Logger in Java (solution)
- java.lang.OutOfMemoryError: Java heap space : Cause and Solution (steps)
How to Fix Error: “Class, Interface, or Enum Expected” ?
Learn via video course
Java Course — Mastering the Fundamentals
Tarun Luthra
Free
Start Learning
The braces in java are served as a scope limit. The beginning and end of a code block are indicated by curly brackets.
Curly brackets cause the compile-time error known as the class interface or enum expected error in Java. This issue typically happens when the program ends with an extra curly brace.
Since everything in Java is programmed inside a class, interface, or enum, if you close the curly bracket for one class and add another, the compiler will assume that another class is starting and will complain about the class, interface, or enum keyword, as illustrated in the following program:
Code explanation
If we compile this code it will raise this error
because of extra braces.
Misplaced Curly Braces
The root cause of the “class, interface, or enum expected” error is typically a misplaced curly brace “}”. This can be an extra curly brace after the class. It could also be a method accidentally written outside the class.
Code Explanation
The following error will be raised
To solve this error simply remove extra brace
Function Outside Class (Intro+ Add Code Example Ti Fix Error)
A method present outside of a class may also be the cause of this problem. The compilation process will fail since this method does not belong to any class. Moving the method within the class will fix this issue.
Code Explanation
In Above code method1 is outside of class classb this will raise error.To solve this placed method1 inside of classb.
Multiple Package
In a Java file, only one package can be declared. The expected compilation error for a class, interface, or enum will occur if we have more packages than necessary.
Code Explanation
To solve error import only one package.Each source file can only have one package statement, and it must apply to all of the file’s types.
Conclusion
- The class, interface, or enum expected error occurs due to a few different reasons.
- This error can occur due to misplaced braces by removing extra braces or adding missing braces this error can be solved.
- If a method is included outside of a class, then this error can happen. By placing method within class error can be solved.
- This error can be raised if multiple packages are imported in a java file. It is possible to fix errors by importing just one package.
- The solution to this problem is rather simple.