Saturday 31 March 2012

MENGENAL PARSING ERROR PADA C++

Tulisan ini didasari pada pengalaman yang saya dan teman-teman alami ketika masuk kelas pemrograman di kuliah. Saya dan beberapa teman2 di tugaskan untuk membuat program sederhana menggunakan aplikasi C++. Kendala yang kami alami adalah ketika semua code sudah selesai di tulis di C++, ketika menekan F9 untuk mengetahui apakah scrypt yg kami tulis sudah benar atau tidak muncul error yang begitu banyak. dan di aplikasi C++ yang kami gunakan di beritahu syntax error yang terjadi.
Karena masih pemula dalam pemrograman saya dan teman-teman merasakan kesulitan memahami maksud error yang muncul. Berangkat dari pengalaman tersebut, saya mencoba untuk search di google daftar list syntax/parsing error pada pemrograman C++ agar ketika mengalami syntax/parsing error di kemudian hari pada C++  saya dan teman-teman dapat langsung mengetahui dan memperbaiki syntax atau parsing error yg terjadi.

beberapa syntax error pada C++

  1.  "expected constructor, destructor, or type conversion before ‘namespace’"
    ini terjdi karena kita menggunakan kata "use" yang seharusnya "using"
    contoh : 
     
    Salah
    #include <iostream>   
     use namespace std;   // "using" is correct, not "use"
     int main(void) 
     {
       cout << "A";
       return 0;
     }
     
    Benar 
    #include <iostream>   
     using namespace std;   // that's better!
     int main(void) 
     {
       cout << "A";
       return 0;
     } 
     
    2. "expected initializer before numeric constant"
    kita lupa untuk meletakkan tanda "=" sebelum angka
     
    salah 
    void foo()
     {
       int i 2;        // no =!
     }
     
    Benar 
     void foo()
     {
       int i = 2;        // ahhh, better!
     }
     
    3. "expected initializer before ‘x’"
     
     kita lupa meletakkan tanda "=" sebelum x
     
    salah
     void foo()
     {
       int x = 2;
       int y x;           // should be an equals sign
     }
     
    benar
     void foo()
     {
       int x = 2;
       int y = x;           // ahhh, better!
     }
     
    4. " expected primary-expression before ‘=’ token"
    terjadi jika kita meletakkan tanda "=" pada #define
     
    salah 
     #define PI = 3.1425926  // = is incorrect
    void foo()
     {
       int i = PI;
     }
     
    benar 
     #define PI 3.1425926   // ahhh, better!
      void foo()
     {
       int i = PI;
     }
     
    5. "expected unqualified-id before ‘)’ token"
    terjadi ketika kita meletakkan tanda kurung "()"
     
    salah
     class Foo()  // extraneous ()
     {
       // stuff
     }
     
    benar 
     class Foo   // no ()
     {
       // stuff
     } 
     
    atau bisa terjadi ketika kita meletakkan tanda ; pada akhir sebuah define
     
    salah 
     #define STUFF 1.0;
     MyClass() : myVar(STUFF)  //STUFF puts extraneous ; in
     
    benar
     #define STUFF 1.0
     
    6.  expected identifier before ‘&’ token
    kita meletakkan tanda & di tempat yang salah
     
    salah 
     void foo(&int bar)  // ampersand goes before bar
     {
       // stuff 
     }
     
    benar
     void foo(int &bar)   // the ampersand is in the right place now
     {
       // stuff 
     }
     
    7.  expected `)' before ‘tile’
     
    salah 
    class Blort {
       Blort(Foo);
     };
     #include "blort.h"
     Blort::Blort(Foo aFoo) {   // Foo not defined
       // stuff
     } 
     
    benar 
     class Foo {
       // stuff
     } 
    #include "foo.h"   // now Foo is defined
     Class Blort {
       Blort(Foo);
     }; 
      #include "blort.h"
     Blort::Blort(Foo aFoo) {
       // stuff
     }
     
    8. expected ‘;’ before ‘}’ token
    kita lupa meletakkan tanda semicolon ";" pada satu block code
     
    salah 
    class Foo
     {
       int i;
       int j    // no semicolon
     };
     
    benar
     class Foo
     {
       int i;
       int j;   // semicolon
     };
     
    9.  expected `;' before numeric constant
    - kita lupa meletakkan tanda "<<" pada bagian printing
     
    salah 
     #include <iostream>
     using namespace std;
     int printTwo()
     {
       cout << "there are " 2 << " apples" << endl;  // missing "<<"
     }
     
    benar
     #include <iostream>
     using namespace std;
     int printTwo() 
     {
       cout << "there are " << 2 << " apples" << endl;  // better!
     }
     
    - atau bisa terjadi jika kita lupa meletakkan tanda "()" pada exit statement
     
    salah
    int main(void)
     {
       exit 3;  // wrong
     }
     
    benar
    int main(void)
     {
       exit(3);  // right
     }
     
    atau bisa terjadi jika kita mendefenisikan sebuah isi untik sebuah varibel dan kita menggunakan variabel yang sama pada fungsi defenisi
     
    salah 
    #define N 10
     ...
     main(){
     ...
     theFunction(N);  //function call
     ...
     }
     void theFunction(int N) //wrong!!! N is replace by 10 in pre processing
     {}
     
    benar
     #define N 10
     ...
     main(){
     ...
     theFunction(N);  //function call
     ...
     }
     void theFunction(int n) //right !!! change from N to n different variable
     {}
     
    10. expected `;' before string constant
    lupa meletakkan tanda "<<" pada bagian akhir printing
     
    salah 
     #include <iostream>
     using namespace std;
     int foo(int count) 
     {
       cout << "there are " << count " apples" << endl;  // missing "<<"
     }
     
    benar
     #include <iostream>
     using namespace std;
     int foo(int count) 
     {
       cout << "there are " << count << " apples" << endl;  // ahhh, better!
     }
     
    11. expected `:' before ‘int’
    kita lupa meletakkan tanda ":" setelah privacy indicator pada bagian class declaration
     
    salah 
    class Foo
    {
      public int getOne()  // missing :
      {
        return 1;
      }
      public int getTwo()  // don't need to repeat
      {
        return 1 + getOne();
      }
    };
     
    benar
    class Foo
    {
    public:             // say "public" once here
      int getOne()  
      {
        return 1;
      }
      int getTwo()  
      {
        return 1 + getOne();
      }
    };
      
    12. expected initializer before ‘Foo’
     
    salah 
    #include "Foo.h"
     class Bar extends Foo
     {
       // stuff  
     }; 
     
    benar
    #include "Foo.h"
     class Bar: public Foo
     {
       // stuff  
     };
     
    13. expected class-name before ‘{’ token
     
    salah
     class Foo: public Bar   // Foo is a subclass of Bar
     {
       // stuff
     };
     
    benar
     #include "Bar.h"         // this makes Bar recognized
     class Foo: public Bar   
     {
       // stuff
     };
     
    14. undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_ 
     
     salah
    Makefile: 
    foo: foo.o
        cc testLatLngToPixel.o -o testLatLngToPixel      # cc doesn't work for some reason
     (blank line)       
     .cc.o:
        g++ -v -g -c $< 
    foo.cc:
     #include <iostream>
      #include <string>
      using namespace std;
      int main ()
      {
        string bar;
      }
     
    benar
    Makefile: 
    foo: foo.o
       g++ testLatLngToPixel.o -o testLatLngToPixel         # g++
     (blank line)       
     .cc.o:
       g++ -v -g -c $< 
    foo.cc: 
     #include <iostream>
      #include <string>
      using namespace std;
      int main ()
      {
        string bar;
      } 
    sumber saya ambil dari http://cplusplus.syntaxerrors.info/index.php?title=Main_Page 
 untuk tulisan berikutnya saya akan coba mengulas Syntax error pada C++

No comments: