lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Ref : Compilation lilypond 1.6.2 with gcc 3.2 and flex *2.5.19*


From: Joerg Anders
Subject: Re: Ref : Compilation lilypond 1.6.2 with gcc 3.2 and flex *2.5.19*
Date: Tue, 10 Sep 2002 16:39:19 +0200 (MEST)

On Tue, 10 Sep 2002, Alexandre Beneteau wrote:

 ...
> lexer.ll: In member function `virtual int My_lily_lexer::yylex()':
> lexer.ll:227: `cerr' undeclared (first use this function)
> lexer.ll:227: (Each undeclared identifier is reported only once for each
>     function it appears in.)

....
> 
> Is anybody knowing c++ and flex can give a fix/patch ???
> Thanks in advance,
> 
> 

I don't know exactly this (f)lex error. But because I
spended some days (and nights) to make my program noteedit
gcc-3.2 compatible I think I know from many problems I had
what's wrong:

In gcc-3.2 you cannot write:

   #include <iostream>

   main() {
        char word[128];
        cout << "Say a word >>> ";
        cin >> word;
        cerr << "the word is " << word << endl;
   }

The result is:

   $ g++ ctest.cc -o ctest
   ctest.cc: In function `int main()':
   ctest.cc:5: `cout' undeclared (first use this function)
   ctest.cc:5: (Each undeclared identifier is reported only once for each 
function
      it appears in.)
   ctest.cc:6: `cin' undeclared (first use this function)
   ctest.cc:7: `cerr' undeclared (first use this function)
   ctest.cc:7: `endl' undeclared (first use this function)


Correct is either:

   #include <iostream>

   main() {
        char word[128];
        std::cout << "Say a word >>> ";
        std::cin >> word;
        std::cerr << "the word is " << word << std::endl;
   }


or:

    #include <iostream>

    using namespace std;

    main() {
        char word[128];
        cout << "Say a word >>> ";
        cin >> word;
        cerr << "the word is " << word << endl;
    }

------

Furthermore: Some (f)lex' procduce the following declaration:

  extern int isatty();

This declaration differs from the declaration in "unistd.h".
This is no problem in C. But the C++ compiler gets
excited over this declaration difference.

I found no other solution than to introduced the following
suffix rule in Makefile:

.ll.cc:
        $(LEX) -olex.yy.c $<
        sed '/extern *int *isatty/d' lex.yy.c > $@
        rm lex.yy.c


-- 
J.Anders, Chemnitz, GERMANY (address@hidden)






reply via email to

[Prev in Thread] Current Thread [Next in Thread]