Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error a function-definition is not allowed here before '{' token [closed]

Tags:

c++

void main1()    
{

    const int MAX = 50;

    class infix
    {

    private:

            char target[MAX], stack[MAX];
            char *s, *t;
            int top, l;
        public:
            infix( );
            void setexpr ( char *str );
            void push ( char c );
            char pop( );
            void convert( );
            int priority ( char c );
            void show( );
    };
    void infix :: infix( ) //error
    {
        top = -1;
        strcpy ( target, "" );
        strcpy ( stack, "" );
        l = 0;
    }
    void infix :: setexpr ( char *str )//error
    {
        s = str;
        strrev ( s );
        l = strlen ( s );
        * ( target + l ) = '\0';
        t = target + ( l - 1 );
    }
    void infix :: push ( char c )//error
    {
        if ( top == MAX - 1 )
            cout << "\nStack is full\n";
        else
        {
            top++ ;
            stack[top] = c;
        }
    }
}

I am having trouble with this code. This is a part of my code for infix to prefix converter. My compiler keeps giving me the error:

"A function-declaration is not allowed here – before '{' token"

There's actually three errors in this project. My project is due in September 2015, so please help! Thanks in advance.

like image 623
Clones Avatar asked Aug 19 '15 06:08

Clones


Video Answer


2 Answers

You have your classes' function definitions inside your main function, which is not allowed. To fix that, you should place them outside, but to do that you will need to place the whole class outside of main as well (since you need it to be in scope):

class A
{
public:
    void foo();
};

void A::foo()
{
    <...>
}

int main()
{
    <...>
}

It's worth noting that, while it is possible to put the whole class definition inside your main, this is not the best approach:

int main()
{
    class A
    {
    public:
        void foo()
        {
            <...>
        }
    }
}
like image 159
SingerOfTheFall Avatar answered Sep 28 '22 01:09

SingerOfTheFall


You are missing a closing } for the main function.

like image 27
Jørgen Avatar answered Sep 27 '22 23:09

Jørgen